Ansichtszustand beim Postback festlegen
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.
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