2008-09-03 9 views
5

Estoy tratando de establecer una variable ViewState cuando se presiona un botón, pero solo funciona la segunda vez que hago clic en el botón. Aquí está el código detrás:Configuración de viewstate en la devolución de datos

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; 

} 

¿Hay algo que me falta? Aquí está la forma parte del diseño en archivos, muy básica al igual que 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: La muestra es muy simplificada, el "uso txtName.Text en lugar de ViewState" no es la respuesta correcta , Necesito la información para estar en ViewState.

Respuesta

12

Page_Load incendios antes de btnSubmit_Click.

Si desea hacer algo después de que sus eventos de devolución de datos se hayan disparado, use 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()); 
} 

El orden básico va:

  • incendios Página init (init no pueden acceder a ViewState)
  • ViewState se lee
  • incendios carga de las páginas
  • Cualquier eventos fuego
  • incendios PreRender
  • La página presenta
Cuestiones relacionadas