StringBuilder Append indride my record if (! ispostback)
-
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();
} }
해결책
당신이 할 때마다 기억하십시오 어느 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을 통해 지속되지 않습니다.
제휴하지 않습니다 StackOverflow