ASP.NET中OnInit和OnLoad的区别?

时间:2012-01-06 09:54:20

标签: c# asp.net

一周前我接受了一次采访,其中一个问题是ASP.NET中的OnInit和Onload之间的区别是什么?我没有任何线索,我没有在网上找到任何简单的答案,所以有人可以解释一下,简单的两者之间的区别是什么? (我发现的是生命周期中的差异很大。)

4 个答案:

答案 0 :(得分:25)

OnInitInit事件)在所有控件初始化后但在启用ViewState跟踪之前发生。它被称为自下而上(子控件的Init事件在其父项Init事件之前被调用。

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

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

页面级别的下一个事件是InitCompletePreLoad,这两个事件在控件级别都不可见。在回发期间,传入的ViewState会恢复为InitCompletePreLoad之间的控制。

然后是Load事件,它发生在控件和页面上。首先在父级别调用Load,然后在任何子控件中调用{{1}}。主页面的行为类似于页面上关于事件排序的控件。

答案 1 :(得分:18)

您需要阅读ASP.NET page lifecycle

OnInit在生命周期的早期发生 - 视图状态更改尚未完成,并且尚未对其进行跟踪。

答案 2 :(得分:5)

Page_Init之前提出

Page_LoadPage_Init是您在进一步处理之前要执行的代码的好地方,例如将事件处理程序附加到load事件。

最好不要在此事件中访问控件,因为您无法保证已创建

Page_Load是存储代码的好地方,您可以在其中初始化值以及特定于页面的任何控件,因为此时您知道控件存在且可用。

对于大部分应用,您将在Page_Load中放置比在Page_Init中更多的代码

答案 3 :(得分:0)

ASP.NET调用Control类的这两种方法。 OnInit()方法引发Init事件,OnLoad()方法引发Load事件。