2008-09-03 10 views
5

Ich versuche, eine ViewState-Variable zu setzen, wenn eine Taste gedrückt wird, aber es funktioniert nur das zweite Mal, wenn ich auf die Schaltfläche klicke. Hier ist der Code-Behind:Viewstatus auf Postback setzen

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString()); 
    } 
} 

private string YourName 
{ 
    get { return (string)ViewState["YourName"]; } 
    set { ViewState["YourName"] = value; } 
} 


protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    YourName = txtName.Text; 

} 

Gibt es etwas, das ich vermisse? Hier ist die Form-Teil der Design-Datei, sehr einfach nur als POC:

<form id="form1" runat="server"> 
<div> 
Enter your name: <asp:TextBox runat="server" ID="txtName"></asp:TextBox> 
<asp:Button runat="server" ID="btnSubmit" Text="OK" onclick="btnSubmit_Click" /> 
<hr /> 
<label id="lblInfo" runat="server"></label> 
</div> 
</form> 

PS: Die Probe ist sehr vereinfacht, „verwenden txtName.Text statt Viewstate“ ist nicht die richtige Antwort Ich brauche die Informationen in ViewState.

Antwort

12

Page_Load Feuer vor btnSubmit_Click.

Wenn Sie nach dem Start Ihrer Postback-Ereignisse etwas unternehmen möchten, verwenden Sie Page_PreRender.

//this will work because YourName has now been set by the click event 
protected void Page_PreRender(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
     lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString()); 
} 

Die Grundordnung geht:

  • Seite init Brände (init kann nicht Viewstate zugreifen)
  • Viewstate gelesen wird
  • Seite Last Feuer
  • Alle Ereignisse Feuer
  • PreRender Brände
  • Seite rendert