2 Stimmen

Viewstate - völlige Verwirrung.

Das hat mich total verwirrt. Kann mir das jemand erklären?

Markup:

<form id="form1" runat="server">
    <asp:TextBox runat="server" ID="txtTest" />
    <asp:PlaceHolder runat="server" ID="PlaceHolder1" />
    <asp:Button runat="server" Text="Click" />
</form>

Code Behind:

protected void Page_Load(object sender, EventArgs e)
{
    txtTest.Text = "BBB";
    PlaceHolder1.Controls.Add(new TextBox() { Text = "AAA" });
}    

Wenn ich den Text in beiden Textfeldern ändere und dann auf die Schaltfläche "Klicken" klicke, wird der Text in txtTest auf den ursprünglichen Wert "BBB" zurückgesetzt (der in page_load angegeben wurde), aber das dynamische Textfeld behält den Wert, den ich gerade eingegeben habe (und nicht "AAA"), obwohl dieser zur gleichen Zeit wie das andere, "hartkodierte" Textfeld angegeben wurde.

0voto

Jeff Siver Punkte 7314

Ich sehe zwei Probleme mit immer ViewState auf das dynamisch hinzugefügte Textfeld.

  1. Das Steuerelement wird erstellt und aktualisiert, bevor der ViewState auf dynamische Steuerelemente angewendet wird. Dies geschieht nach dem Page_Load, aber vor dem Klick-Ereignis Ihrer Schaltfläche. Aus diesem Grund wird Ihr Text-Wert überschrieben.
  2. Damit der ViewState konsistent gepostet werden kann, müssen Sie dem dynamisch hinzugefügten Steuerelement eine ID zuweisen, die sich nicht ändert. Andernfalls, wenn die Seite mehr dynamische Steuerelemente bekommt, werden Sie sehen, Zeiten, in denen ViewState wird nicht gelten, wie Sie erwarten.

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