【问题标题】:Can a masterpage reference another masterpage with the same content and contentplaceholder tags?母版页可以引用具有相同内容和 contentplaceholder 标签的另一个母版页吗?
【发布时间】:2011-01-08 01:48:06
【问题描述】:

当前设置

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

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

基本上我有:

Cn => B1 => A

厘米 => B2 => A

这个层次结构很好。

所需的设置

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

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

挑战在于,我在一个相当复杂的产品范围内工作,我无法更改原来的两个同级母版页(B1 和 B2)或内容页 (C) 以任何有意义的方式。

我想要:

Cn => D => B1 => A

厘米 => D => B2 => A

Ck => D => B3 => A

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

其他详情

  • 所有 B 级页面都有相同的内容/内容占位符标签,只是排序和样式不同。
  • D 可以尽可能复杂,只要它不需要修改 C 或 B。
  • 我正在使用 ASP.Net 2.0

这可能吗?

【问题讨论】:

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


    【解决方案1】:

    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.
    }
    

    【讨论】:

    • 不确定我是否有那么大的控制力......我会试一试。
    • 如果您对页面本身没有太多控制,您还可以创建一个与内容页面继承的任何类具有相同名称/命名空间的部分类,并将上面的代码添加到部分类。 (这假设 Content Page 所继承的类尚未定义 Page_Init 且未密封。)
    • 我没有足够的控制权来完全按照您所说的去做,但是我在产品的范围内发现了另一种机制,可以让我以不同的方式做我想做的事。无论如何,您的建议在一般理解方面很有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 2013-10-01
    • 1970-01-01
    • 2015-06-28
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多