繁体   English   中英

ASP.NET中的OnInit和OnLoad有区别吗?

[英]Difference OnInit and OnLoad in ASP.NET?

一周前我接受了一次采访,问题之一是ASP.NET中的OnInit和Onload有什么区别? 我一无所知,网上也找不到简单的答案,所以有人可以简短地解释一下两者之间的区别吗? (我发现差异在生命周期中有些不足)。

Init所有控件之后但在启用ViewState跟踪之前,会发生OnInitInit事件)。 这就是所谓的自下而上(在Init子控件的事件是他们的父母的之前调用Init事件)。

Init是向页面或用户控件添加动态控件的好地方(尽管这不是必需的)。 如果可以的话,这些控件将在回发期间自动还原其ViewState (请参见下文)。 但是,这是设置控件属性的危险地方,因为它们可以被传入的ViewState覆盖。 Init是设置ViewStateUserKey的正确位置,它可以帮助保护您的站点免受一键式攻击。 如果您使用控件状态,也可以从那里调用RegisterRequiresControlState()

Init事件之后,每个控件都将启用ViewState跟踪,因此此后对控件属性的任何更改都将反映在ViewState

页面级的下一个事件是InitCompletePreLoad ,这两个事件在控件级都不可见。 在回发期间,传入的ViewState将还原到InitCompletePreLoad之间的控件中。

然后是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM