Asp.net 是否可以更改嵌套母版页';谁是主人?
好的,我们都知道如何在页面的OnPreInit事件中动态更改母版页 但是嵌套母版页呢?我可以换主人的主人吗 母版页类中没有公开OnPreInit事件Asp.net 是否可以更改嵌套母版页';谁是主人?,asp.net,master-pages,Asp.net,Master Pages,好的,我们都知道如何在页面的OnPreInit事件中动态更改母版页 但是嵌套母版页呢?我可以换主人的主人吗 母版页类中没有公开OnPreInit事件 有什么想法吗?刚刚测试过,它从使用嵌套母版页的页面的PreInit开始工作 protected void Page_PreInit(object sender, EventArgs e) { this.Master.MasterPageFile = "/Site2.Master"; } 显然,您需要确保在您要交换的页面之间ContentP
有什么想法吗?刚刚测试过,它从使用嵌套母版页的页面的PreInit开始工作
protected void Page_PreInit(object sender, EventArgs e)
{
this.Master.MasterPageFile = "/Site2.Master";
}
显然,您需要确保在您要交换的页面之间ContentPlaceholder ID是一致的。我们将Andy的方法与“BasePage”类相结合-我们创建了一个继承自System.Web.UI.Page的类,然后我们的所有页面都继承自该类 然后,在我们的基本页面类中,我们可以执行相关检查,以查看应该使用哪个根母版页-在我们的示例中,我们有一个“演示”母版和一个“创作”母版-演示版本具有所有导航和页面设备,以及大量的显示CSS,虽然authoring master为创作工具提供了一些额外的JS、更轻的CSS,并且没有导航(这是用户实际创作页面而不是修改站点布局时使用的)
然后,此基本页可以调用page.Master.MasterPageFile,并将其设置为创作母版(如果该页的状态正确)。以防任何人无意中发现此问题,并用“内容控件必须是内容页中的顶级控件或引用母版页的嵌套母版页”将其撕成碎片尝试Andy的代码时出错,请清除
此.Master
。因此,代码变成:
protected void Page_PreInit(object sender, EventArgs e)
{
MasterPageFile = "/Site2.Master";
}
编辑正如Zhaph在下面指出的,我的代码^^^只会更改当前页面的主控形状,而不会更改主控形状。这就是Hainesy在提到“我们都知道动态更改母版页”时所说的代码(我没有,d'oh)。如果您碰巧通过谷歌搜索“stackoverflow change master page”(我就是这么做的)进入此页面,那么这可能就是您正在寻找的代码:-)以添加到Zhaph-Ben Duguid的答案上,(顺便说一下+1): 下面是设置嵌套母版页的母版页的示例代码。所有页面都继承自此基本页面,因此此代码只存在于一个位置
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";
}
}
}
}
嗯,是的,这是一个解决办法。不幸的是,这意味着将代码放在使用母版页的每个页面中,而不是放在一个地方。我不确定哪一个是两个恶魔中比较少的。。。复制母版页以便有两个副本将大大减少工作!但这只会改变内部母版页,而不会改变外部母版页,这正是海恩西想要的。我想说的是,你对一个外部主控器有一个问题,它没有内部主控器所需的所有占位符。啊,明白了。对不起,这一次我搞错了。我有一个母版的标准页面,而不是嵌套的母版。这将教会我首先阅读和思考:-)