1

好的,我有一个母版页和一个继承该母版的嵌套母版页。

所有页面都实现嵌套母版页:

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

所以我需要动态设置顶级母版页。2 个站点在页眉和仅页眉中具有完全不同的布局。

如何在代码中控制它?查看事件层次结构,但这只是说您只能在页面级别设置母版页,我有数千页!这不切实际

我只想在NestedMaster页面级别和该级别进行一次更改。这可以做到吗?

我试过了:

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

但我只是得到:

“MasterPageFile”属性只能在“Page_PreInit”事件中或之前设置。

母版页没有PreInit事件,烦人!

4

1 回答 1

0

做了更多的谷歌搜索后,我意识到这是不可能的,因为基类是Page,这是第一个被调用的东西,因此你可以指定 PreInit 的唯一地方。上帝我讨厌网络表单。

也就是说,我认为我已经从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()
    {
    }
} 
于 2012-08-17T10:27:49.260 回答