在最近的一次采访中,有人问了以下问题。
• 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
Init 事件将触发(最内层到最外层)
aspx.page Begin Init
–> Inside user control Page_Init
–> Inside master page Page_Init
–> Inside lifecycle page Page_Init
aspx.page End Init
并且加载事件将会触发
aspx.page Begin Load
–> Inside lifecycle page Page_Load
–> Inside master page Page_Load
–> Inside user control Page_Load
aspx.page End Load
为什么 ASP.NET 框架支持不同的执行顺序Load()
and Init()
.这是面试时问的问题。我不知道面试官对我的期望是什么。
我请求你的帮助。
我建议阅读有关ASP.NET 页面生命周期 http://msdn.microsoft.com/en-us/library/ms178472.aspx.
两者的目的不同,因此执行顺序也不同。
初始化:
在页面初始化期间,页面上的控件可用,并且每个控件的 UniqueID 属性均已设置。如果适用,母版页和主题也会应用于页面。如果当前请求是回发,则回发数据尚未加载,控件属性值尚未恢复为视图状态中的值。
Load:
在加载期间,如果当前请求是回发,则控件属性将加载从视图状态和控件状态恢复的信息。
此外,您还需要了解关系 https://stackoverflow.com/questions/3716734/what-is-the-relation-between-a-content-page-and-master-page-in-terms-of-oop母版页和内容页之间(母版页实际上包含在内容页中,而不是相反)和两者的完整生命周期 http://blogs.thesitedoctor.co.uk/tim/2006/06/30/Complete+Lifecycle+Of+An+ASPNet+Page+And+Controls.aspx.
因此,在初始化期间,需要首先初始化用户控件,以便它们可供其容器使用,然后是母版页,以便其内容可供内容页使用,然后是页面本身,从而完成控件层次结构初始化。
在加载期间,会发生相反的情况,因为现在所有回发数据都已设置并且所有控件都已准备好并且可以触发不同的事件。顶部容器首先加载内容页(因为它可以更改母版页和用户控件),然后加载母版页,最后加载叶控件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)