当初我实现这个的时候也是相当郁闷,老是丢失值,于是我就用Visable来解决(是加载WebControl)。以下是其他人的解决方案,蛮有参考价值的。
引用 随心所欲
http://www.cnblogs.com/dlwang2002/archive/2006/12/07/585093.html
结论就是:
1:在特定的时刻加入该控件的定义。至少在Page_Load以前,我用的Page_Init。晚了就执行不了了
2:该控件的id必须一致。因为状态的恢复是根据控件id来完成的。
3:Rebuild的时候一定不要调用子控件的初始化的函数,这样会浪费时间。
问题:可不可以通过设置UserControl的IsPostBack属性来达到一种和Page类似的处理方式呢?这样在UserControl里面就可以使用if(!IsPostBack)来做一些数据初始化了。
引用 Cat Chen
我有写过《深入理解ASP.NET动态控件》的系列文章,你可以去看看有没有值得参考的内容:
http://www.cnblogs.com/cathsfz/archive/2006/10/31/545521.html
http://www.cnblogs.com/cathsfz/archive/2006/11/05/550985.html
http://www.cnblogs.com/cathsfz/archive/2006/11/19/564929.html
关于追赶加载也详细解释了,并非0~n步都会在追赶加载中执行,只有特定的步骤会执行。如果控件已经加载完第k步,添加到另一个加载完第n步的控件中,则仅执行(k+1)~n步,前面的不会重复执行。
至于UserControl的加载很费时,这是你无法绕过去的。如果你的意思是,页面默认加载UserControlA,发生事件后要丢弃UserControlA改为加载UserControlB,浪费了时间在加载UserControlA上。以现在的ASP.NET页面生存周期模型,我们无法解决这个问题,你改进后的解决方案也还是要先加载默认的UserControlA。