Ich füge dynamisch einige Benutzersteuerelemente zu einem PlaceHolder-Serversteuerelement hinzu. Meine Benutzersteuerung besteht aus einigen Beschriftungen und einigen Textboxsteuerelementen.
Wenn ich das Formular abschicke und versuche, den Inhalt der Textfelder (innerhalb jedes Benutzersteuerelements) auf dem Server anzuzeigen, sind sie leer.
Wenn das Postback abgeschlossen ist, haben die Textfelder die Daten, die ich vor dem Postback eingegeben habe. Dies sagt mir, dass der Text in den Boxen durch ViewState beibehalten wird. Ich weiß einfach nicht, warum ich sie beim Debuggen nicht finden kann.
Kann mir bitte jemand sagen, warum ich die Daten nicht sehen würde, die der Benutzer auf dem Server eingegeben hat?
Danke für jede Hilfe.
Dies basiert auf der .NET v1-Ereignissequenz, aber es sollte Ihnen die Idee geben:
Wie Sie sehen, erfolgt das Laden von ViewState-Daten zurück zu den Steuerelementen vor dem Load-Ereignis. Damit Ihre dynamisch hinzugefügten Steuerelemente diese Werte "beibehalten" können, müssen sie vorhanden sein, damit die ASP.NET-Seite die Werte zuerst erneut laden kann. Sie müssten diese Steuerelemente in der Init-Phase neu erstellen, bevor der Ladezustand angezeigt wird.
Ich habe gestern herausgefunden, dass Sie Ihre App wie gewohnt funktionieren lassen können, indem Sie den Kontrollbaum laden, nachdem das loadviewstateevent ausgelöst wurde. Wenn Sie das Ereignis loadviewstate überschreiben, rufen Sie mybase.loadviewstate auf und fügen Sie anschließend Ihren eigenen Code ein, um die Steuerelemente unmittelbar danach neu zu generieren. Die Werte für diese Steuerelemente stehen beim Laden der Seite zur Verfügung. In einer meiner Apps verwende ich ein Viewstate-Feld, um die ID oder die Array-Informationen zu halten, mit denen diese Steuerelemente neu erstellt werden können.
%Vor%Stellen Sie sicher, dass Sie Ihre dynamischen Steuerelemente auf Klassenebene definieren und sie dem ASP-Container hinzufügen:
%Vor%Wenn Sie das Steuerelement instanziieren, stellen Sie sicher, dass Sie LoadControl aufrufen, damit das Objekt ordnungsgemäß hinzugefügt wird:
%Vor%Sie müssen Ihre Steuerelemente im Page_PreInit-Ereignishandler erstellen. Das ASP.NET-Serversteuerungsmodell ist schwierig. Sie müssen den Seitenlebenszyklus vollständig verstehen, um es richtig zu machen.
Wir haben das gleiche erlebt und haben es mit ghost controls auf page_load behandelt, die genau die gleiche .ID haben, und dann nimmt der Post-back die Ereignisse und die Daten auf. Wie andere sagten, ist es das dynamische Hinzufügen des Steuerelements nach den Initialisierungsphasen, dass der Status bereits erstellt wurde und die Steuerelemente nach dem Hinzufügen nicht gespeichert werden.
Hoffe, das hilft ein bisschen.
Ich möchte auch hinzufügen, dass Benutzersteuerelemente so funktionieren, wie Sie es erwarten würden, indem Sie die Eigenschaft "Control.ID" zur Laufzeit setzen. Wenn Sie die ID nicht festlegen, werden Elemente möglicherweise in einer anderen Reihenfolge erstellt und arbeiten merkwürdig.
Tags und Links asp.net user-controls postback