Understanding ASP.NET View State https://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic11
我编写了个实例:
public partial class _Default : Page
{
protected void Page_Init(object sender, EventArgs e)
{
this.Title = "ss";
System.Web.UI.WebControls.TextBox TextBox3 = new TextBox();
TextBox3.Text = "textbox3Init";
TextBox3.ID = "textbox3Init";
PlaceHolder1.Controls.Add(TextBox3);
}
protected void Page_Load(object sender, EventArgs e)
{
System.Web.UI.WebControls.TextBox TextBox2 = new TextBox();
TextBox2.Text = "textbox2Init";
TextBox2.ID = "textbox2Init";
PlaceHolder1.Controls.Add(TextBox2);
}
protected void Button1_Click(object sender, EventArgs e)
{
foreach (Control c in PlaceHolder1.Controls)
{
if(c.ID == "textbox3Init")
{
((TextBox)c).Text = "button1click";
}
if (c.ID == "textbox2Init")
{
((TextBox)c).Text = "button1click";
}
}
}
}
}
注意:还有一个button2,但是他没有添加任何时间,但是有postback功能。
1. 第一次访问该页面:
textbox2,textbox3的text都是初始值(这时可以理解成没有viewstate)
2. click "button1";
textbox2,textbox3' text都赋予了button1click; (这是回传是viewstate会保存值)
3. click "button2"
这是初始化后,会load state view, load post data(这是post data没有变化的值); save state view, render;
3. modify textbox2 text to 'buttone1clicktest'
这是初始化,会load state view, load post data(这是的postdata就是变化了for textbox2), save state view, render.
另外:我的理解:_viewstate在client是不会被修改的,它会原封不动的再次传给服务器
这里有个问题,我的textbox2实在(page_load)动态加载的,按照原理page的load view state在page_load之前已经完成,那么textbox2这个control的view state就应该是不会给load了,实时上却被加载了,所以我觉得应该是control仍然要遵循这个流程(当他别创建出来时),init, load viewstate, load post data, 到最后的render