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.

È stato utile?

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