2012-08-17 72 views
1

好的我有一个母版页和一个嵌套的母版页,继承这个母版。设置嵌套的母版页的主版本

所有页面实施嵌套母版页:

MasterPage 
    --> NestedMaster 
      --> Page1 
      --> Page2 
      --> etc. 

所以我需要动态设置顶级母版页。 2个网站的头和头只有完全不同的布局。

我如何在代码中控制它?看着活动层次,但这只是说你只能设置主页面页面级别,我有成千上万的页面! 这不是练习

我想仅在NestedMaster页级别和该级别进行单个更改。这可以做到吗?

我已经试过:

protected override void OnInit(EventArgs e) 
{ 
    this.MasterPageFile = getMasterPath(); 
    base.OnInit(e); 
} 

,但我只是得到:

的 '的MasterPageFile' 属性只能在或 'Page_PreInit' 事件之前设置。

主页面没有PreInit事件,烦人!

回答

0

做了更多的Google搜索后,我意识到这是不可能的,因为基类是Page,这是第一个被调用的,因此是唯一可以指定PreInit的地方。上帝我讨厌webforms。

这就是说我认为我从http://odetocode.com/Articles/450.aspx得到了一个解决方案。基本上生成一个自定义的HTTPModule:

using System; 
using System.Web; 
using System.Web.UI; 

public class MasterPageModule : IHttpModule 
{ 
    public void Init(HttpApplication context) 
    { 
     context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute); 
    } 

    void context_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     Page page = HttpContext.Current.CurrentHandler as Page; 
     if (page != null) 
     { 
      page.PreInit +=new EventHandler(page_PreInit); 
     } 
    } 

    void page_PreInit(object sender, EventArgs e) 
    { 
     Page page = sender as Page; 
     if (page != null) 
     { 
      page.MasterPageFile = "~/Master1.master"; 
     } 
    } 

    public void Dispose() 
    { 
    } 
} 
相关问题