我正在尝试动态更改母版页,尽管从内容页面(覆盖OnPreInit
)很容易做到,但母版页没有此类事件。有可能以某种方式介绍这个事件吗?
更新:我通过梯子底部的PreInit
页面走到一半,结果证明你可以做base.Master.MasterPageFile = "/master.Master";
之类的事情,但是某些原因,这不会加载最顶层母版页的标题中的东西,即样式表。
答案 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);
}
}