Question

Comment éviter primordial?

 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();

    } }
Était-ce utile?

La solution

Rappelez-vous, chaque fois que vous faites any postback, même si elle est juste pour gérer un événement, la pleine cycle de vie se déroulera. Pour aider à comprendre cela, vous pouvez penser à votre code comme si tout cela était dans une grande fonction, plus comme ceci:

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

    }
}

Bien sûr, ce n'est pas ce qui se passe réellement, mais à partir de la pensée comme ceci et vous êtes sur la bonne voie. Dans ce cas, notez que votre événement clic jamais exécuté en même temps que votre code !IsPostBack, mais vous utilisez un nouveau StringBuilder chaque fois.

Vérifiez ici pour plus d'informations sur le cycle de vie de la page:
http://msdn.microsoft.com/en-us/library/ms178472. aspx

Autres conseils

ASP.NET est apatride, ce qui signifie que votre instance de StringBuilder ne persistera pas à travers la publication automatique à moins que vous enregistrez quelque chose comme état viewstate ou session.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top