不同执行顺序的目的:Init()和Load()

ASP*_*ner 4 asp.net events

在最近的一次采访中,提出了以下问题.

• A Master page which contains 
   • An ASPX web form page which contains 
      • A Web User Control inside the page which contains 
         • A button to fire some code in a button_click event
Run Code Online (Sandbox Code Playgroud)

初始事件将触发(内部最多到外部最多)

aspx.page Begin Init
   –> Inside user control Page_Init 
   –> Inside master page Page_Init
   –> Inside lifecycle page Page_Init 
aspx.page End Init
Run Code Online (Sandbox Code Playgroud)

和Load事件将触发

aspx.page Begin Load
  –> Inside lifecycle page Page_Load
  –> Inside master page Page_Load
  –> Inside user control Page_Load 
aspx.page End Load
Run Code Online (Sandbox Code Playgroud)

为什么ASP.NET框架支持不同的执行顺序Load()Init().这是面试中提出的问题.我不知道面试官对我的期望.

我请求你的帮助.

Ode*_*ded 10

我建议阅读有关ASP.NET页面生命周期的内容.

两者有不同的目的,因此执行顺序不同.

初始化:

在页面初始化期间,页面上的控件可用,并且每个控件的UniqueID属性都已设置.如果适用,还会对页面应用母版页和主题.如果当前请求是回发,则尚未加载回发数据,并且控制属性值尚未恢复为视图状态中的值.

加载:

在加载期间,如果当前请求是回发,则控制属性将加载从视图状态和控制状态恢复的信息.

此外,您需要了解母版页和内容页之间的关系(母版页实际上包含在内容页中,而不是相反)以及两者的完整生命周期.


因此,在init期间,需要首先初始化用户控件,因此它们可用于其容器,然后是主页,因此它的内容可用于内容页面,然后是页面本身,从而完成控件层次结构初始化.

在加载过程中,相反的情况发生,因为现在所有的回发数据都已设置好并且所有控件都准备就绪并可以触发它们的不同事件.顶部容器,内容页面首先加载(因为它可以更改母版页和用户控件),然后是主页面,最后是叶子控件.