2009-03-25 6 views
1

Ich habe ein benutzerdefiniertes Steuerelement (kompiliert als DLL), das ein Benutzersteuerelement lädt. (Das benutzerdefinierte Steuerelement führt ein LoadControl aus). In dem Benutzersteuerelement befindet sich eine Schaltfläche und ein Textfeld. Ich verbinde das Click-Ereignis der Schaltfläche.Custom Control lädt ein Benutzersteuerelement; Postback-Ereignisse werden nicht ausgelöst

Ich gebe einen Wert in das Textfeld ein. Wenn ich auf den Knopf klicke, macht die Seite ein Postback. Meine Benutzerverwaltung weiß, dass ein Postback aufgetreten ist, da Page.IsPostBack = true ist. Das Klickereignis der Schaltfläche wird jedoch nie ausgelöst und mein Textfeld hat auch den Wert verloren, den ich eingegeben habe.

Wer hat irgendwelche Gedanken darüber, was passieren könnte?

EDIT: Ich habe einen Test auf diese und nahm SharePoint aus dem Bild; Ich konnte es reproduzieren, also entfernte ich alle Verweise auf SharePoint.

Antwort

1

Wenn Sie das Benutzersteuerelement dynamisch laden, müssen Sie es bei jedem Laden der Seite neu laden (Postback oder nicht), damit der .net-Prozessor weiß, wo das Submit-Ereignis weitergeleitet wird.

+0

Ich lade es jedes Mal neu. – bugfixr

+0

Im Abschnitt RenderContents des benutzerdefinierten Steuerelements. – bugfixr

+0

Ich glaube, es ist zu diesem Zeitpunkt zu spät. Die Steuerelemente sollten vor oder nach Page_Load geladen werden, vorzugsweise auf OnInit. – Ruslan

0

Wenn Sie eine Datenbindung durchführen, müssen Sie überprüfen, dass Sie nur so vorgehen! Page.IsPostBack Wenn Sie eine Datenbindung durchführen, löschen Sie jeden "gespeicherten" Status aus dem Postback.

+0

Ich bin nicht Datenbindung. Die page_load des UC ist leer. – bugfixr

0

Klingt, als würden Sie das Steuerelement beim Postback nicht neu erstellen. Sie müssen das Steuerelement während Page_Init für den zu ladenden Ansichtszustand hinzufügen.

+0

Das benutzerdefinierte Steuerelement (das eine, das ich als DLL geschrieben habe) wird in das Markup der Seite geladen. ASP.NET verarbeitet, wenn es geladen wird ... also ich denke nicht, dass das das Problem ist. – bugfixr

1

Eine Möglichkeit, das Benutzersteuerelement zu laden, besteht darin, CreateChildControl zu überschreiben, base.CreateChildControls aufzurufen und dann die LoadControl-Methode aufzurufen. Wenn Sie das UserControl an einem bestimmten Speicherort platzieren müssen, platzieren Sie einen PlaceHolder auf der Seite, und fügen Sie Ihr Steuerelement der Steuerelementgruppe "Platzhalter" hinzu.

Sie können das Benutzersteuerelement auch direkt zum Markup hinzufügen.

die Steuerung als solche registrieren:

<%@ Register Src="~/path/ControlName.ascx" TagName="tagName" TagPrefix="myPrefix" %> 

und es dann in hinzufügen wie folgt:

<myPrefix:tagName ID="myId" runat="server"/> 
Verwandte Themen