ASP.Net: Benutzer-Steuerelemente Hinzugefügt-Platzhalter dynamisch abrufen kann Werte
Ich bin hinzufügen einige user controls dynamisch in einen Platzhalter-server-Steuerelement. Mein user-control besteht aus einigen labels und einige Steuerelemente.
Wenn ich das Formular abschicken und versuchen, die Inhalte der Textfelder (in jedem Benutzer-Steuerelement) auch auf dem server, Sie sind leer.
Wenn das postback abgeschlossen, die Textfelder, die Daten, die ich eingetragen vor postback. Das sagt mir, dass der text in den Feldern beibehalten werden durch ViewState. Ich weiß nur nicht, warum kann ich Sie nicht finden, wenn ich Debuggen.
Kann mir bitte jemand sagen, warum ich nicht sehen, die vom Benutzer eingegeben Daten auf dem server?
Vielen Dank für jede Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basiert .NET v1-Ereignis-Sequenz, aber es sollte Ihnen die Idee:
Wie Sie sehen können, wird das laden der ViewState-Daten zurück, um die Kontrollen passieren, bevor das Load-Ereignis. Also, um für Ihren dynamisch-hinzufügen von Steuerelementen zu "behalten" diese Werte, werden Sie vorhanden für die ASP.NET Seite neu laden der Werte in den ersten Platz. Müssten Sie neu erstellen, diese Kontrollen auf der Init-Phase, vor dem Laden Ansichtsstatus.
Dachte ich gestern, dass Sie können tatsächlich machen, Ihre app zu arbeiten, wie normal, durch das laden der Steuerelement-Baum direkt nach dem loadviewstateevent ausgelöst wird. wenn Sie das überschreiben der loadviewstate-Ereignis aufrufen mybase.loadviewstate und fügen Sie Ihren eigenen code zu generieren die Steuerelemente nach rechts, die Werte für diese Elemente werden auf die Seite laden. In einer meiner apps, die ich verwenden ein viewstate-Feld, halten Sie die ID oder den array-Informationen, dass kann verwendet werden, um erstellen dieser Steuerelemente.
Ich glaube, Sie brauchen, um das Benutzersteuerelement hinzufügen, um die Platzhalter während der Init-phase des Lebenszyklus der Seite, um den ViewState ausgefüllt werden, indem die Load-phase zum Lesen dieser Werte. Ist dies die Reihenfolge, in der Sie laden diese?
Sicherzustellen, Sie definieren Ihre dynamische Steuerelemente, die auf Klassen-Ebene und fügen Sie diese in die ASP-container:
Und beim instanziieren des Steuerelements, sicherzustellen, dass Sie nennen, LoadControl, damit das Objekt korrekt Hinzugefügt:
Erstellen Sie die Steuerelemente in der Page_PreInit-Ereignis-handler. Die ASP.NET server-control-Modell ist heikel; Sie müssen vollständig verstehen, die Seite lifecycle es richtig zu machen.
Wie schon andere gesagt haben, jede form der Kontrolle, manipulation getan werden muss, bevor viewstate erstellt.
Hier ist eine gute link-auf der Seite lifecycle, um Ihnen zu helfen:
http://msdn.microsoft.com/en-us/library/ms178472.aspx
Wir haben die gleiche Sache erlebt und behandelt haben, es mit Geist steuert auf page_load, die haben genau die gleiche .ID und dann die post zurück greift, die Ereignisse und die Daten. Wie andere sagte, es ist das dynamische hinzufügen der Kontrolle nach den init-Phasen, die der Staat bereits gebaut und Steuerelemente Hinzugefügt, nachdem nicht gespeichert.
Hoffe, das hilft ein bisschen.
Ich möchte auch hinzufügen, dass ich gesehen habe, Benutzer-Steuerelementen arbeiten, die Art und Weise, dass Sie würde erwarten, dass Sie nur durch die Einstellung der Steuerung.ID-Eigenschaft zur Laufzeit. Wenn Sie nicht die ID, Elemente können gebaut werden in einer anderen Reihenfolge und das funktioniert komischerweise.