在Page_Load中创建的TextBox何时回填视图数据
本帖最后由 fuyun2000 于 2012-12-07 12:42:01 编辑
在客户端改了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";//每次的客户端修改,这边都进来了,所以肯定会有恢复视图的时段,但是目前没找到是在哪个过程中
}
------最佳解决方案--------------------没怎么看懂LZ说的1-5步
说下我对LZ贴的代码的理解吧
Page_Load(object sender, EventArgs e)
{
TextBox text1 = new TextBox();//在页面载入之前实例化一个textbox的控件
text1.ID = "text1";
text1.Text = "text1";
text1.TextChanged += new EventHander(Text_Change);//在该控件上添加一个文本修改的事件
}
//当text1控件的文本被修改时会触发此事件
Text_Change(object sender, EventArgs e)
{
string text = "hello";//每次的客户端修改,这边都进来了,所以肯定会有恢复视图的时段,但是目前没找到是在哪个过程中
}
但是LZ你并没有把该text1的控件放在界面上,所以按理说 text_change的事件是不会被执行的
我在本地测了也没有被执行
------其他解决方案--------------------
LoadPostData 是在Page_Load前的,所以控件需要在Page_Init里动态创建
------其他解决方案--------------------再次为自己顶
------其他解决方案--------------------
if(!ispostback)
Page_Load(object sender, EventArgs e) {
{
TextBox text1 = new TextBox();
text1.ID = "text1";
text1.Text = "text1";
}
}
------其他解决方案--------------------
关键是我测试的时候是执行了,所以不解
------其他解决方案--------------------
你没看到Page_Load后还有一个LoadPostData,你自己贴了图都没看过程啊?
------其他解决方案--------------------