在客户端改了Page_Load中创建的TextBox的值后触发change事件,不太理解,我的理解
1、LoadAllState恢复页面中控件的状态
2、ProcessPostData对比控件状态与PostData的值,改动则添加到集合中,以待后面触发事件
3、LoadRecursive中触发页面Load事件和所有控件的Load事件,此时也刚好是我在页面中创建了text1控件,但是还是初始值,没恢复视图状态
4、再次调用ProcessPostData以保证第第一次ProcessPostData没有被匹配到的控件被找到,这次应该找到了我创建的那控件text1,然后比较是否状态发生了变化
5、接下来就是触发一系列的控件改变事件以及回传事件了
我这代码简单一点看明白就行,问题也就是发生我上面讲的第三步的Load事件和第四步的ProcessPostData中,这两者之间也没发现回填视图状态,所以text1控件是什么时候恢复状态的
Page_Load(object sender, EventArgs e)
{
TextBox text1 = new TextBox();
text1.ID = "text1";
text1.Text = "text1";
text1.TextChanged += new EventHander(Text_Change);
}
Text_Change(object sender, EventArgs e)
{
string text = "hello";//每次的客户端修改,这边都进来了,所以肯定会有恢复视图的时段,但是目前没找到是在哪个过程中
}
强烈建议不好在cs文件中创建什么服务器端的什么控件
只是为了研究
@自由小菜园: 最好是不要这样做,都用JS文件搞定还是很不错的
ProcessPostData本身就是回复视图的操作。
在第四步发生了恢复Viewstate。
恳请解释,第四步不是恢复回传的数据吗,也就是用户填的东西,怎么会是恢复视图呢?
@自由小菜园: 是,就是恢复用户回传的数据。
Page_load 事件有问题。
没有对 回发事件做判断
TextBox text1 = new TextBox();
text1.ID = "text1";
if(!IsPostBack)
{
text1.Text = "text1";
}
text1.TextChanged += new EventHander(Text_Change);
楼上的,我故意这样写的,晕死我了,为了确定是否有视图回填的过程啊