母版页与内容页合并时事件发生的顺序:
Content page PreInit event.
Master page controls Init event.
Content controls Init event.
Master page Init event.
Content page Init event.
Content page Load event.
Master page Load event.
Master page controls Load event.
Content page controls Load event.
Content page PreRender event.
Master page PreRender event.
Master page controls PreRender event.
Content page controls PreRender event.
Master page controls Unload event.
Content page controls Unload event.
Master page Unload event.
Content page Unload event.
但是为什么母版页在ASP.NET
中没有PreInit
事件?
母版页继承: System.Web.UI.MasterPage
并且根据此MasterPage
类的设计,没有为此类定义此类PreInit
事件。
母版页派生自 Control 类,如下面的层次结构所示:
System.Object
System.Web.UI.Control
System.Web.UI.TemplateControl
System.Web.UI.UserControl
System.Web.UI.MasterPage
因此,现在可以猜到,母版页的行为实质上被视为控件,并且具有类似于其他 asp.net 服务器控件的事件。
一种建议的阅读是this
。
母版页没有 PreInit 方法。
您可以采用几种替代方案。
1、创建一个公共基页类供所有其他页面继承,在该类中设置主题属性;http://www.odetocode.com/Articles/450.aspx
事件的顺序如下;
- 用户控件初始化
- 母版页初始化
-
内容页面初始化
-
LOAd 内容页面加载
- LOAd 母版页加载
-
LOAd 用户控制负载
-
内容页面呈现
- 母版页预呈现
- 用户控件呈现
有关示例的更多详细信息,请参阅以下链接;
http://getmscode.blogspot.in/2014/11/sequence-of-events-in-master-page-and.html
与 UrlMapping 模型相同,创建一个应由 IHttpModule 生成的类,然后将其引用添加到 Web.config
public class MasterPageModule: IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
//your code
}
}
<httpModules>
<addname="MasterPageModule"type="MasterPageModule"/>
</httpModules>