【问题标题】:Can I change a nested master page's master dynamically?我可以动态更改嵌套母版页的母版吗?
【发布时间】:2009-02-24 14:33:43
【问题描述】:

好的,所以我们都知道在页面的 OnPreInit 事件中动态更改母版页。

但是嵌套母版页呢?可以换master的master吗?

MasterPage 类中没有公开 OnPreInit 事件。

有什么想法吗?

【问题讨论】:

    标签: asp.net master-pages


    【解决方案1】:

    刚刚对此进行了测试,它可以在使用嵌套 MasterPage 的页面的 PreInit 中运行。

    protected void Page_PreInit(object sender, EventArgs e)
    {
        this.Master.MasterPageFile = "/Site2.Master";
    }
    

    显然,您需要确保 ContentPlaceholderId 在您正在交换的页面之间保持一致。

    【讨论】:

    • 嗯,是的,这是一种解决方案。不幸的是,这意味着将代码放在使用母版页的每个页面中,而不是放在一个地方。我不确定哪一个是两个弊端中较小的...复制母版页所以有两个副本会少得多!
    【解决方案2】:

    我们将 Andy 的方法与“BasePage”类相结合——我们创建了一个继承自 System.Web.UI.Page 的类,然后我们的所有页面都继承自该类。

    然后,在我们的基础页面类中,我们可以执行相关检查以查看应该使用哪个根母版页 - 在我们的例子中,我们有一个“演示”母版和一个“创作”母版 - 演示版本包含所有导航和页面家具,以及繁重的显示 CSS,而创作大师有一些额外的 JS 用于创作工具,更轻的 CSS,并且没有导航(这是我们在用户实际创作页面时使用的,而不是修改网站布局)。

    然后,此基本页面可以调用 Page.Master.MasterPageFile 并将其设置为 Authoring master,如果这是页面的正确状态。

    【讨论】:

      【解决方案3】:

      以防万一有人偶然发现这一点并用“内容控件必须是内容页面中的顶级控件或引用母版页的嵌套母版页中的顶级控件”错误在尝试安迪的代码时,去掉this.Master。于是,代码变成了:

      protected void Page_PreInit(object sender, EventArgs e)
      {
          MasterPageFile = "/Site2.Master";
      }
      

      编辑正如 Zhaph 在下面指出的那样,我拥有的代码 ^^ 只会更改当前页面的主页面,而不是主页面的主页面。这是 Hainesy 在提到“我们都知道动态更改母版页”时所说的代码(我没有,d'oh)。如果您碰巧通过谷歌搜索“stackoverflow change master page”(这就是我所做的)到达此页面,那么这可能就是您正在寻找的代码:-)

      【讨论】:

      • 但这只会改变内部母版页,而不是外部母版页,这正是 Hainesy 想要的。我会说你有一个外部 master 的问题,它没有内部 master 所需的所有占位符。
      • 啊,明白了。我把这根棍子弄错了,对不起。我的股票标准页面只有一个母版,而不是嵌套母版。这将教会我首先阅读和思考:-)
      【解决方案4】:

      补充 Zhaph - Ben Duguid 的答案,(顺便说一下 +1):

      这是设置嵌套母版页的母版页的示例代码。所有页面都继承自此 BasePage,因此此代码仅存在于一处。

      public class BasePage : System.Web.UI.Page
      {
          private void Page_PreInit(object sender, System.EventArgs e)
          {
              if (Request.Browser.IsMobileDevice)
              {
                  if (Page.MasterPageFile == "~/master/nested.master")) 
                  {
                      Page.Master.MasterPageFile = "~/master/mobile.master";
                  } 
                  else 
                  {
                      MasterPageFile = "~/master/mobile.master";
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 2010-12-07
        相关资源
        最近更新 更多