문제

재정의를 피하는 방법?

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

    } }
도움이 되었습니까?

해결책

당신이 할 때마다 기억하십시오 어느 Postback, 이벤트를 처리하기 위해서도 가득한 페이지 수명주기가 실행됩니다. 이를 이해하기 위해 코드를 하나의 큰 기능인 것처럼 생각할 수 있습니다.

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

    }
}

물론 이것은 실제로 일어나는 일이 아니지만 이런 생각을 시작하면 올바른 길을 가고 있습니다. 이 경우 클릭 이벤트가 동시에 실행되지 않습니다. !IsPostBack 코드이지만 매번 새로운 StringBuilder를 사용하고 있습니다.

페이지 라이프 사이클에 대한 자세한 내용은 여기를 참조하십시오.
http://msdn.microsoft.com/en-us/library/ms178472.aspx

다른 팁

ASP.NET은 SATENESS입니다. 즉, StringBuilder 인스턴스는 ViewState 또는 Session State와 같은 것으로 저장하지 않으면 PostBack을 통해 지속되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top