Domanda

Come evitare di sovrascrivere?

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

    } }
È stato utile?

Soluzione

Ricordate, ogni volta che si fa qualsiasi postback, anche se è solo per gestire un evento, il completa ciclo di vita della pagina verrà eseguito.Per aiutare a capire questo, si può pensare di codice come se fosse tutto in una funzione di grande, più simile a questo:

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

    }
}

Naturalmente, questo non è ciò che effettivamente accade, ma di iniziare a pensare a come questo e sei sulla strada giusta.In questo caso, si noti che l'evento click non potrà mai funzionare, allo stesso tempo, come il vostro !IsPostBack il codice, ma si utilizza un nuovo StringBuilder ogni volta.

Controllare qui per ulteriori informazioni sul ciclo di vita della pagina:
http://msdn.microsoft.com/en-us/library/ms178472.aspx

Altri suggerimenti

ASP.NET è senza stato, il che significa che l'istanza StringBuilder non persisterà attraverso il postback a meno che non si salva a qualcosa come ViewState o una sessione di stato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top