Pregunta

Estoy intentando configurar 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 subyacente:

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 este olvidando?Aquí está la parte del formulario del archivo de diseño, muy básica como un POS:

<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>

PD: El ejemplo está muy simplificado, "use txtName.Text en lugar de ViewState" no es la respuesta correcta, necesito que la información esté en ViewState.

¿Fue útil?

Solución

Page_Load incendios antes btnSubmit_Click.

Si desea hacer algo después de que se hayan activado sus eventos de devolución de datos, utilice 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 es:

  • El inicio de página se activa (init no puede acceder a ViewState)
  • Ver estado se lee
  • La carga de la página se dispara
  • Cualquier evento se dispara
  • Incendios previos al renderizado
  • Representaciones de página
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top