2008-09-03 8 views
5

J'essaie de définir une variable ViewState lorsqu'un bouton est enfoncé, mais cela ne fonctionne que la deuxième fois que je clique sur le bouton. Voici le code-behind:Définition de viewstate en postback

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; 

} 

Y at-il quelque chose qui me manque? Voici la forme partie du fichier de conception, très basique comme un 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: L'échantillon est très simplifiée, « utiliser txtName.Text au lieu de ViewState » est pas la bonne réponse , J'ai besoin de l'info pour être dans ViewState.

Répondre

12

Page_Load déclenche avant btnSubmit_Click.

Si vous voulez faire quelque chose après que vos événements de publication ont été déclenchés, utilisez 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()); 
} 

L'ordre de base va:

  • page feux d'initialisation (init ne peuvent pas accéder ViewState)
  • ViewState est lu
  • incendies de charge Page
  • Tous les événements incendie
  • feux de prerender
  • Rendu de la page