добавление stringbuilder переопределяет мою запись, если (!IsPostBack)

StackOverflow https://stackoverflow.com/questions/1168638

  •  19-09-2019
  •  | 
  •  

Вопрос

Как избежать переопределения?

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

    } }
Это было полезно?

Решение

Помните, каждый раз, когда вы делаете Любой обратная передача, даже если это просто для обработки события, полный жизненный цикл страницы будет запущен.Чтобы помочь понять это, вы можете представить свой код так, как если бы все это было в одной большой функции, примерно так:

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

    }
}

Конечно, это не то, что происходит на самом деле, но начните думать об этом таким образом, и вы на правильном пути.В этом случае обратите внимание, что ваше событие click никогда не будет запускаться одновременно с вашим !IsPostBack код, но вы каждый раз используете новый StringBuilder.

Смотрите здесь для получения дополнительной информации о жизненном цикле страницы:
http://msdn.microsoft.com/en-us/library/ms178472.aspx

Другие советы

ASP.NET не имеет состояния, что означает, что ваш экземпляр StringBuilder не будет сохраняться при обратной передаче, если вы не сохраните его во что-то вроде viewstate или session state .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top