我在一周前接受了一次采访,其中一个问题是ASP.NET中OnInit和Onload之间的区别是什么?我没有任何线索,我没有在网上找到任何简单的答案,所以有人可以解释一下,简单的两者之间的区别是什么?(我发现的是,生命周期中存在差异).
Ric*_*kNZ 26
OnInit
(Init
事件)在所有控件初始化之后但在ViewState
启用跟踪之前发生.它被称为自下而上(Init
子控件的Init
事件在其父事件之前被调用).
Init
是一个向页面或用户控件添加动态控件的好地方(虽然这不是必需的).如果可以,那么这些控件将ViewState
在回发期间自动恢复(见下文).但是,设置控件属性是一个冒险的地方,因为它们可以被传入覆盖ViewState
.Init
是一个正确的设置位置ViewStateUserKey
,可以帮助保护您的网站免受一键攻击.RegisterRequiresControlState()
如果你正在使用控制状态,你也可以从那里打电话.
在之后Init
的事件,每个控制使ViewState
跟踪,所以自那以后,控件的属性的任何更改将反映ViewState
.
页面级别的下一个事件是,InitComplete
并且PreLoad
在控件级别都不可见.在回发期间,传入ViewState
将恢复到InitComplete
和之间的控制PreLoad
.
然后是Load
事件,对于控件和页面都会发生.Load
在父级别首先调用,然后在任何子控件中调用.主页面的行为类似于页面上关于事件排序的控件.
Ode*_*ded 18
您需要阅读ASP.NET页面生命周期.
OnInit
在生命周期的早期发生 - 视图状态更改尚未完成,并且尚未启用对其的跟踪.
Page_Init
之前被提出来了Page_Load
.Page_Init
在进一步处理之前,您希望执行的代码是一个好地方,例如将事件处理程序附加到load事件.
最好不要在此事件中访问控件,因为您无法保证它们已被创建.
Page_Load是存储代码的好地方,您可以在其中初始化值以及特定于页面的任何控件,因为此时您知道控件存在且可用.
对于大多数应用,您将在Page_Load中放置比在Page_Init中更多的代码
归档时间: |
|
查看次数: |
34249 次 |
最近记录: |