日期:2014-05-20  浏览次数:20460 次

OnInit和PageLoad这两个方法,我该在什么时候,分别用什么方法??
OnInit和PageLoad这两个方法,我该在什么时候,分别用什么方法??

------解决方案--------------------
在Init发生的时候,没有任何动态装载控件,仅仅装入了设计器上“写死”的控件。并且没有任何状态ViewState值,没有任何客户端post值。Init仅仅是说明那些写死的控件已经装载。例如页面上设计有DataGrid,在Init的时候DataGrid控件已经存在但是没有任何Item也没有任何正确的PageSize等属性值。例如页面上设计有TextBox,在Init的时候虽然已经存在Init,但是没有那些基于动态ViewState的属性,更没有客户端最新的Text值。

在Load发生的时候,对于那些动态状态的控件,上述一切已经齐备。对于动态装载的控件,如果是写在CreateChildControls方法中的,也已经齐备。对于那些喜欢写在load中动态装载的控件,则只有状态会立即填入,而客户端post值必须等Load结束之后才能填入。

很难说为什么有这样的设计。我估计本来的设计是应该在CreateChildControls方法中创建子控件,在Load中是在所有控件初始化完成准备触发业务逻辑事件之前给客户程序一个通知。而很多人把动态控件滚利偏要写在Load中,最后只好将错就错,考虑将Load中动态装载的控件在Load结束之后再额外处理一次。