StringBuilder的追加如果重写我的纪录(!的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();
} }
解决方案
记住,每次你做时间的任何的回传,哪怕只是为了处理事件,在完全页的生命周期将运行。为了帮助理解这一点,你可以把你的代码,就好像它都在一个大的功能,更是这样的:
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是无状态的,这意味着你的StringBuilder实例不会通过回发坚持,除非你把它保存到类似视图状态或会话状态。
不隶属于 StackOverflow