String anhängen meine Platte außer Kraft setzen if (! IsPostBack)
-
19-09-2019 - |
Frage
Wie überwiegende vermeiden?
public partial class test : System.Web.UI.Page {
StringBuilder sb = new StringBuilder();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
sb.Append("one");
lbl.Text = sb.ToString();
}
}
protected void cmdSb_Click(object sender, EventArgs e)
{
sb.Append("two");
lbl.Text = sb.ToString();
} }
Lösung
Denken Sie daran, jedes Mal wenn Sie Stellen Sie keine Postbacks, auch wenn es nur ein Ereignis zu behandeln, die voll Lebenszyklus ausgeführt wird. Um dies zu verstehen, können Sie Ihren Code denken, als ob sie alle in einer Funktion groß waren, mehr wie folgt aus:
public partial class test : System.Web.UI.Page
{
// Page_Load runs for EVERYTHING
protected void Page_Load(object sender, EventArgs e)
{
// -- Constructor Area
StringBuilder sb = new StringBuilder();
// -- Page Init Area
// -- ViewSate is loaded
// -- Page Load Area
if (!IsPostBack)
{
sb.Append("one");
lbl.Text = sb.ToString();
}
// -- Validation controls are checked
// -- If valid, start handling events
// Handle your click event
if (cmdSb_Clicked)
{
sb.Append("two");
lbl.Text = sb.ToString();
}
// -- DataBinding Area
// -- Save ViewState
// -- Render Page: the class is turned into html that is sent to the browser
// -- Unload -- Page is disposed
}
}
Dies ist natürlich nicht das, was tatsächlich passiert, aber es wie folgt beginnen Denken und du bist auf dem richtigen Weg. In diesem Fall beachten Sie, dass Ihr Click-Ereignis wird nie zur gleichen Zeit wie Ihr !IsPostBack
Code ausführen, aber Sie einen neuen String mit jedes Mal.
Überprüfen Sie hier, um weitere Informationen auf der Seite Lebenszyklus:
http://msdn.microsoft.com/en-us/library/ms178472. aspx
Andere Tipps
ASP.NET staatenlos ist, was bedeutet, dass Ihr String Instanz nicht durch den Postback anhalten wird, wenn Sie es so etwas wie Ansichtszustand oder Sitzungszustand speichern.