Frage

Ich versuche, eine ViewState-Variable festzulegen, wenn eine Schaltfläche gedrückt wird, aber es funktioniert erst, wenn ich zum zweiten Mal auf die Schaltfläche klicke.Hier ist der Code-Behind:

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;

}

Fehlt mir etwas?Hier ist der Formteil der Designdatei, sehr einfach, nur so 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: Das Beispiel ist sehr vereinfacht: „use txtName.Text Anstelle von „ViewState“ ist dies nicht die richtige Antwort. Ich benötige, dass die Informationen in ViewState enthalten sind.

War es hilfreich?

Lösung

Page_Load Brände vorher btnSubmit_Click.

Wenn Sie etwas tun möchten, nachdem Ihre Postback-Ereignisse ausgelöst wurden, verwenden Sie 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());
}

Die Grundreihenfolge lautet:

  • Seiteninit wird ausgelöst (Init kann nicht auf ViewState zugreifen)
  • ViewState wird gelesen
  • Das Laden der Seite wird ausgelöst
  • Alle Ereignisse werden ausgelöst
  • PreRender wird ausgelöst
  • Seite wird gerendert
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top