如何动态更改母版页的母版页?

时间:2010-09-22 16:09:07

标签: asp.net master-pages

我正在尝试动态更改母版页,尽管从内容页面(覆盖OnPreInit)很容易做到,但母版页没有此类事件。有可能以某种方式介绍这个事件吗?

更新:我通过梯子底部的PreInit页面走到一半,结果证明你可以做base.Master.MasterPageFile = "/master.Master";之类的事情,但是某些原因,这不会加载最顶层母版页的标题中的东西,即样式表。

4 个答案:

答案 0 :(得分:3)

引自:Can I change a nested master page's master dynamically?

  

刚试过这个,它可以使用嵌套的MasterPage的PreInit。       protected void Page_PreInit(object sender,EventArgs e)
  {
      this.Master.MasterPageFile =“/ Site2.Master”;
  }

显然,您需要确保 ContentPlaceholderIds在您交换的网页之间保持一致。

答案 1 :(得分:1)

如果你覆盖了MasterPageClass并添加了自己的onPreInit,你可能会这样做,但我认为即使这样也行不通。根据Reflector肯定没有它的构造,甚至没有任何覆盖,尽管它继承UserControl然后总是OnInit ...或者你可以尝试覆盖get_Master(),但这可能也不起作用......

答案 2 :(得分:0)

使用母版页构造函数。

答案 3 :(得分:0)

假设您要使用不带菜单的其他母版页,请传递查询字符串NoMenu。

protected void Page_PreInit(object sender, EventArgs e)
 {
   //You'll go through infinite loop if you do not check if we already have the new master page, this will switch to different master page if requested without a menu for example
   if (Request.QueryString["NoMenu"] != null && this.MasterPageFile != "/MasterPageNoMenu.master")
    {
        this.MasterPageFile = "/MasterPageNoMenu.master";

        base.OnPreInit(e); 
    }
}