Asp.NET动态控件的状态问题

我正在做的一个东东(保密*_*)里面用到了Asp.NET控件的动态加载,也就是通过TemplateControl.LoadControl(string virtualPath)方法动态将控件加载到页面,可是确碰到了一个问题,就是子控件的页面状态恢复不了,症状是这个样子的:用户控件中的TextBox等简单控件的状态可以恢复,可是DropDownList、TreeView等的页面状态却恢复不了,按照以前的经验仔细检查了一边又一边,问题还是解决不了。

1.控件在Add到父控件时正确设置了ID,而且Postback前后的ID一致;

2.控件是在Page的Init事件中加载的,这样子的话,不管在控件加入前或后添加DropDownList的Item,页面状态都应该正确保存,因为TrackViewState在Init事件之后执行,按照控件生命周期的追赶原则(动态控件一开始是新建对象,处于原始状态,当它被加到父控件的Controls里时,父控件会根据其当前的control阶段来调用该子控件的一些方法,让子控件赶上父控件的control阶段),没有必要象在Load事件中加载那样,必须控件添加到父控件后再添加子项;

头大了,只好翻出Reflactor来,查看.NET Framework的源码了,原来Asp.NET里的控件的LoadViewStateByID属性默认为false,页面状态按照控件位置加载,而非ID,唉,搞了我一个晚上,在基类加上ViewStateModeById元数据属性,OK了,hoho~,记一下,免得以后忘了。顺付Asp.NET2.0控件生命周期:

1。Instantiate
2。Initialize
3。Begin Tracking View State
4。Load View State (postback only)
5。Load Postback Data (postback only)
6。Load
7。Raise Changed Events (postback only, optional)
8。Raise Postback Events (postback only, optional)
9。PreRender
10。SaveViewState
11。Render
12。Unload
13。Dispose

转载于:https://www.cnblogs.com/XOrb/archive/2007/08/25/869319.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值