ASP.NET MVC 嵌套主页,继承内容。

5
我有一系列嵌套的母版页,如下所示:
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块定义了内容,以便子页面可以潜在地访问它,所以在顶级母版页中定义的内容被覆盖掉了。
有什么办法可以解决这个问题吗?

我也在努力寻找解决这个问题的方法。自从你提出问题以来,已经过去了一年左右,你是否发现了方便的解决方法? - Funka
并不是真的。嵌套占位符解决方案虽然有效,但显然很丑陋。我已经转向Razor视图引擎,它有一个更好的系统,可以选择性地呈现页面部分,在你想要替换内容时才进行替换等。 - 3Dave
3个回答

1

我想不到其他方法,除了在您的子母版中包含以下内容

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

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

希望对你有所帮助,
查尔斯


我不想在很多地方都要重复那个。我们需要处理相当多的页面。 - 3Dave
你是指有相当多的母版吗?因为你只需要在(子)母版中进行操作。 - Charlino
两年后,经过完整的重新设计和迁移至Sitefinity,现在这真的有意义了。 - 3Dave

1

移除所有的ContentPlaceHolder,直接将SearchFormControl放在site.master上。如果您从不想覆盖SearchFormControl,则无需定义ControlPlaceHolder


问题在于我确实想要覆盖SearchFormControl内容。它在站点的几个不同区域中呈现方式不同,但有些区域需要使用顶级站点主页面的默认内容。 - 3Dave
1
@David Lively - 根据你的两条评论,听起来你想要占全了便宜又不失去任何东西。 - John Farrell

1

你可以将内容放在主页面的contentPlaceHolder中。如果您没有在子页面上覆盖它,则默认情况下将呈现该内容。


当我添加一个新的“使用主页面的Web表单”时,设计师将覆盖主页面中找到的所有占位符。有没有一种方法可以告诉它不要覆盖其中一个? - Adi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接