为什么母版页在 ASP.NET 中没有 PreInit 事件?


以下是

母版页与内容页合并时事件发生的顺序:

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

事件的顺序如下;

  1. 用户控件初始化
  2. 母版页初始化
  3. 内容页面初始化

  4. LOAd 内容页面加载

  5. LOAd 母版页加载
  6. LOAd 用户控制负载

  7. 内容页面呈现

  8. 母版页预呈现
  9. 用户控件呈现

有关示例的更多详细信息,请参阅以下链接;

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>

最新更新