Impostazione dello stato di visualizzazione sul postback
Domanda
Sto cercando di impostare una variabile ViewState quando viene premuto un pulsante, ma funziona solo la seconda volta che faccio clic sul pulsante.Ecco il codice sottostante:
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;
}
C'è qualcosa che mi manca?Ecco la parte del modulo del file di progettazione, molto semplice proprio come un file 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'esempio è molto semplificato, "use txtName.Text
invece di ViewState" non è la risposta corretta, ho bisogno che le informazioni siano in ViewState.
Soluzione
Page_Load
incendi prima btnSubmit_Click
.
Se vuoi fare qualcosa dopo che gli eventi di postback sono stati attivati, usa 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'ordine di base è:
- L'init della pagina viene attivato (init non può accedere a ViewState)
- ViewState viene letto
- Il caricamento della pagina viene attivato
- Tutti gli eventi vengono attivati
- Il prerender viene attivato
- Rendering della pagina
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow