日期:2014-05-17  浏览次数:20402 次

在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";
}
}


------其他解决方案--------------------
引用:
没怎么看懂LZ说的1-5步

说下我对LZ贴的代码的理解吧
C# code?1234567891011121314Page_Load(object sender, EventArgs e){     TextBox text1 = new TextBox();//在页面载入之前实例化一个textbox的控件     text1.ID = "text1";     t……

关键是我测试的时候是执行了,所以不解
------其他解决方案--------------------
引用:
LoadPostData 是在Page_Load前的,所以控件需要在Page_Init里动态创建

你没看到Page_Load后还有一个LoadPostData,你自己贴了图都没看过程啊?
------其他解决方案--------------------
引用:
C# code?12345678if(!ispostback)Page_Load(object sender, EventArgs e) { {     TextBox text1 = new TextBox();     text1.ID = "text1";     text1.Text = "text1";}}