Pergunta

Como evitar a substituição?

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

    } }
Foi útil?

Solução

Lembre-se, cada vez que você qualquer postback, mesmo que seja apenas para lidar com um evento, o completo ciclo de vida da página será executado. Para ajudar a entender isso, você pode pensar em seu código como se fosse tudo em uma função de grande, mais como esta:

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

    }
}

Claro que isso não é o que realmente acontece, mas a partir de pensar nisso como este e você está no caminho certo. Neste caso, nota que o seu evento de clique nunca funcionará ao mesmo tempo como o seu Código !IsPostBack, mas você está usando um novo StringBuilder de cada vez.

Confira aqui mais informações sobre o ciclo de vida de página:
http://msdn.microsoft.com/en-us/library/ms178472. aspx

Outras dicas

ASP.NET é apátrida, o que significa que sua instância StringBuilder não irá persistir através do PostBack a menos que você salve-o em algo como viewstate ou sessão estado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top