Configuración del estado de visualización en la devolución de datos
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.
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