3 Stimmen

Das <asp:Label>-Textwert aus dem ViewState für dynamisch hinzugefügten Steuerelement verlieren

Ich füge Steuerelemente programmgesteuert im Code-Behind zu einer Seite hinzu. Ich füge ein asp:Label hinzu und setze den Textwert. Ich füge ein asp:TextBox hinzu und setze den Textwert. Beide Textwerte werden im Response zurückgegeben und im Browser angezeigt. Soweit alles in Ordnung.

Der Benutzer führt eine Aktion durch, die zu einem Postback führt. Ich lade das dynamisch hinzugefügte asp:Label und asp:TextBox neu. Wenn die Antwort an den Browser zurückgegeben wird, wird nur der Textwert des asp:TextBox angezeigt. Der Textwert des asp:Label wird nicht angezeigt.

Wenn ich den HTML-Code inspiziere, kann ich das asp:Label-Steuerelement (gerendert als HTML-Span-Tag) sehen, aber ohne Wert.

Wie kann ich den Code dazu bringen, den Textwert eines asp:Label automatisch bei jedem Postback neu zu laden? Warum ist das Verhalten für ein asp:Label und ein asp:TextBox unterschiedlich? Ich möchte nicht den Textwert bei jedem Postback manuell neu setzen.

Hier ist ein ähnlicher Code, den ich verwende (placeHolderNameplates ist ein asp:PlaceHolder-Steuerelement auf der aspx-Seite):

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    If Not Page.IsPostBack Then
        Dim lbl As Label = New Label()
        lbl.ID = "xxx1"
        lbl.Text = "yo"
        placeHolderNameplates.Controls.Add(lbl)

        Dim tb As TextBox = New TextBox
        tb.ID = "xxx2"
        tb.Text = "yoyo"
        placeHolderNameplates.Controls.Add(tb)

    Else
        Dim lbl As Label = New Label()
        lbl.ID = "xxx1"
        placeHolderNameplates.Controls.Add(lbl)

        Dim tb As TextBox = New TextBox
        tb.ID = "xxx2"
        placeHolderNameplates.Controls.Add(tb)

    End If

4voto

jmaglio Punkte 756

Was du tun musst, ist die Steuerung zum Platzhalter hinzufügen, bevor du die Werte festlegst, so soll es sein Dim lbl As Label = New Label() placeHolderNameplates.Controls.Add(lbl) lbl.ID = "xxx1" lbl.Text = "yo"

Siehe diese Beiträge für Details: http://www.yakkowarner.com/2008/01/aspnet-dynamic-controls-and-viewstate.html http://codebetter.com/jefferypalermo/2004/11/25/key-to-ensuring-dynamic-asp-net-controls-save-viewstate-level-300/

Bevor sie zur Seite hinzugefügt werden, haben sie sich nicht initialisiert. Wenn einer dynamischen Steuerung eine andere Steuerung hinzugefügt wird, holt die neue Steuerung auf, um den Zustand zu erreichen, in dem sich die übergeordnete Steuerung befindet. Wenn du zum Beispiel im Page_Load ein Textfeld hinzufügst, wird es aufholen und seine Init- und Load-Phasen durchlaufen. Dies ist wichtig, da es beginnen wird, seinen Ansichtszustand zu verfolgen. Werte, die hinzugefügt werden, bevor er seinen Ansichtszustand verfolgt, werden es nicht in den Ansichtszustand schaffen und gehen beim PostBack verloren.

0voto

Nicholas Punkte 754

Es scheint, dass dynamisch erstellte Steuerelemente nicht automatisch zum ViewState hinzugefügt werden. Das TextBox-Steuerelement behält jedoch seinen Wert bei, da es als HTML-Element gerendert wird.

Schauen Sie sich diesen Artikel an:

http://www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i

0voto

Sanjay Goswami Punkte 1386

Hey, überprüfen Sie diese Seite MSDN

Sie müssen Ihre Steuerung mit folgendem Ereignis hinzufügen (damit die Ansichtszustand automatisch verwaltet wird)

override protected void OnInit(EventArgs e)

Beispiel zum Hinzufügen dynamischer Steuerelemente http://support.microsoft.com/kb/317794/en-us

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X