母版页是否可以引用具有相同内容和contentplaceholder标记的另一个母版页?

时间:2011-01-08 01:48:06

标签: asp.net master-pages asp.net-2.0

当前设置

我目前在以下层次结构中有三个主页和内容页:

  • 显示最终结果的一个根级母版页。称之为“A”
  • 两个兄弟页面彼此不引用但包含所有相同的contentplaceholder元素,只是以不同的顺序,不同的<div>围绕它们。两者都引用根级母版页。称这些为“B1”和“B2”。
  • 引用上述一个或另一个兄弟母版页(不是两者)的几个内容页面。将这些“C1”称为“C-whatever”。

基本上我有:

  

Cn =&gt; B1 =&gt; A

     

Cm =&gt; B2 =&gt; A

此层次结构正常。

所需设置

我想要做的是在内容页面和兄弟主页之间添加一个新级别到此层次结构(新的母版页)。基本上是这样的:

  • 显示最终结果的一个根级母版页。
  • 两个兄弟页面加上第三个兄弟。叫它B3
  • 一个新的中间母版页,动态“选择”其中一个同级母版。期望的行为是将C给出的内容直接传递给Bn而不进行修改。 D主动做的唯一事情是选择哪个Bn。请致电此新主页D.
  • 引用新中间母版页而不是旧兄弟页的几个内容页。

对此的挑战是,我正在一个相当复杂的产品的范围内工作,我无法改变原来的两个兄弟的主页(B1和B2)或内容页面(C)以任何有意义的方式。

我想:

  

Cn =&gt; D =&gt; B1 =&gt; A

     

Cm =&gt; D =&gt; B2 =&gt; A

     

Ck =&gt; D =&gt; B3 =&gt; A

基本上,D应该将所有内容“传递”到它选择的任何B级母版页。我不能把这个逻辑放在C级页面中。

其他详细信息

  • 所有B级页面都具有相同的内容/ contentplaceholder标签,只是按照不同的顺序排列和设置样式。
  • D可以像它必须一样复杂,只要它不需要修改C或B.
  • 我正在使用ASP.Net 2.0

这可能吗?

1 个答案:

答案 0 :(得分:0)

MasterPage没有Page_PreInit事件,因此对MasterPage层次结构(嵌套或其他)的所有更改都必须来自内容页面。

因此,如果您可以修改内容页面,请添加:

void Page_PreInit(object sender, EventArgs e)
{
    //if (someCondition)
        this.Master.MasterPageFile = "~/Path/B1.master";
    //else if (otherCondition)
        this.Master.MasterPageFile = "~/Path/B2.master";
    //etc.
}