[英]Difference OnInit and OnLoad in ASP.NET?
一周前我接受了一次采访,问题之一是ASP.NET中的OnInit和Onload有什么区别? 我一无所知,网上也找不到简单的答案,所以有人可以简短地解释一下两者之间的区别吗? (我发现差异在生命周期中有些不足)。
在Init
所有控件之后但在启用ViewState
跟踪之前,会发生OnInit
( Init
事件)。 这就是所谓的自下而上(在Init
子控件的事件是他们的父母的之前调用Init
事件)。
Init
是向页面或用户控件添加动态控件的好地方(尽管这不是必需的)。 如果可以的话,这些控件将在回发期间自动还原其ViewState
(请参见下文)。 但是,这是设置控件属性的危险地方,因为它们可以被传入的ViewState
覆盖。 Init
是设置ViewStateUserKey
的正确位置,它可以帮助保护您的站点免受一键式攻击。 如果您使用控件状态,也可以从那里调用RegisterRequiresControlState()
。
在Init
事件之后,每个控件都将启用ViewState
跟踪,因此此后对控件属性的任何更改都将反映在ViewState
。
页面级的下一个事件是InitComplete
和PreLoad
,这两个事件在控件级都不可见。 在回发期间,传入的ViewState
将还原到InitComplete
和PreLoad
之间的控件中。
然后是Load
事件,该事件同时发生在控件和页面上。 首先在父级上调用Load
,然后在任何子控件上调用。 对于事件排序,母版页的行为类似于页面上的控件。
您需要阅读ASP.NET页面生命周期 。
OnInit
在生命周期的较早阶段发生-视图状态更改尚未完成,并且尚未打开对其的跟踪。
在Page_Load
之前引发Page_Init
。 Page_Init
是在进一步处理(例如将事件处理程序附加到load事件)之前要执行的代码的好地方。
最好不要在这种情况下访问控件,因为不能保证已创建控件 。
Page_Load是存储代码的理想场所,您可以在其中初始化值和特定于页面的任何控件,因为您知道此时控件已经存在并且可用。
对于大多数应用,您将在Page_Load中放置比在Page_Init中放置更多代码
这两个Control类的方法均由ASP.NET调用。 OnInit()
方法引发Init
事件,而OnLoad()
方法引发Load
事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.