ASP.NET中OnInit和OnLoad的区别?

dg9*_*g90 20 c# asp.net

我在一周前接受了一次采访,其中一个问题是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 在生命周期的早期发生 - 视图状态更改尚未完成,并且尚未启用对其的跟踪.

  • @daageu - 如果你需要初始化一个控件,你应该在这里做.这也是重新创建动态控件的最佳时间 - 否则对其viewstate的更改将不会自动反映. (4认同)
  • 好的,它告诉了更多,但我不明白为什么我应该在加载视图状态更改之前做一些事情.你能给我举个例子吗?这将使我更容易理解为什么它有用.. (3认同)

Cha*_*mal 5

Page_Init之前被提出来了Page_Load.Page_Init在进一步处理之前,您希望执行的代码是一个好地方,例如将事件处理程序附加到load事件.

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

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

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

  • 而不是链接,为什么不发布页面摘要,所以不是每个人都必须点击? (3认同)