【问题标题】:ASP.NET MVC nested master pages, inherit contentASP.NET MVC 嵌套母版页,继承内容
【发布时间】:2010-08-20 04:15:45
【问题描述】:

我有一系列嵌套母版页,如下所示:

site.master:

<asp:ContentPlaceHolder ID="SearchFormContent" runat="server">
<%Html.RenderPartial("SearchFormControl"); %>
</asp:ContentPlaceHolder>

在嵌套(子)母版页中,area.master

<asp:Content ContentPlaceHolderID="SearchFormContent" ID="SearchFormContentContainer" runat="server">
<asp:ContentPlaceHolderID="SearchFormContent" runat="server"/>
</asp:ContentPlaceHolder>

我有两个独立的内容页面。一个想要将自己的内容添加到 SearchFormContent,另一个想要保留在顶级母版页中定义的内容。当然,由于子母版页定义了 SearchFormContent 块的内容,以便子页可以访问它,因此顶级母版页中定义的内容将被删除。

有什么办法吗?

【问题讨论】:

  • 我也在努力寻找解决同样问题的方法。自从你问到这一年左右,你有没有找到一种方便的方法来做到这一点?
  • 并非如此。嵌套占位符解决方案效果很好,尽管它显然很难看。我已经转向 Razor 视图引擎,它有一个更好的系统,可以选择性地呈现页面部分,仅在需要时替换内容等。

标签: asp.net-mvc master-pages


【解决方案1】:

除了在您的子母版页中包含以下内容之外,我想不出任何办法

<asp:Content ContentPlaceHolderID="SearchFormContent" ID="SearchFormContentContainer" runat="server">
    <asp:ContentPlaceHolder ID="SearchFormContent" runat="server">
        <%Html.RenderPartial("SearchFormControl"); %>
    </asp:ContentPlaceHolder>
</asp:ContentPlaceHolder>

我知道这很糟糕,但这是我在使用母版页时能想到的唯一方法。

HTH,
查尔斯

【讨论】:

  • 我不想在所有地方都复制它。我们正在谈论相当多的页面。
  • 您的意思是很多母版页?因为您只需在(子)母版页中执行此操作。
  • 两年后完全重新设计并迁移到 Sitefinity,因此实际上是有道理的。
【解决方案2】:

删除您所有的ContentPlaceHolders 并将SearchFormControl 直接留在site.master 上。如果你不想覆盖SearchFormControl,那么你不需要定义ControlPlaceHolders

【讨论】:

  • 问题是我确实想覆盖 SearchFormControl 内容。它在站点的几个不同区域呈现不同,但某些区域需要使用顶级站点母版页中的默认内容。
  • @David Lively - 根据你的两个 cmets,听起来你想要你的蛋糕并且也想吃它。
【解决方案3】:

您可以将内容放在母版页上的 contentPlaceHolder 中。如果您不使用子页面上的内容覆盖 ,则默认情况下会呈现。

【讨论】:

  • 当我添加一个新的“使用母版页的 Web 表单”时,设计器将覆盖母版页中的所有占位符。有没有办法告诉不要覆盖其中一个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多