自动渲染共享视图作为母版页的一部分?

时间:2011-12-15 10:31:21

标签: asp.net-mvc asp.net-mvc-2 master-pages

我有一个位于Shared / Header.aspx中的共享视图,我希望将其呈现为HeaderContent ContentPlaceHolder的一部分。我的母版页包含:

<asp:ContentPlaceHolder ID="HeaderContent" runat="server" />

我希望能告诉MVC使用Shared / Header视图填充该内容占位符,其中包含:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeaderContent" runat="server">
    ....
</asp:Content>

目前,在我想要填充HeaderContent的每个页面中(以及在某些页面上我不希望它),我这样做:

<asp:Content ID="Content2" ContentPlaceHolderID="HeaderContent" runat="server">
    <% Html.RenderPartial("Header"); %>
</asp:Content>

有没有办法可以有效地执行上述操作,但是来自处理请求的Controller(或ViewPage的子类)?

1 个答案:

答案 0 :(得分:0)

如果要从控制器执行此操作,则可以在ViewData中传递属性,该属性可以从布局页面中选取。例如。在控制器动作中:

ViewData["ShowHeader"] = true;

然后在布局页面中你可以说

<% if(ViewData["ShowHeader"] != null && ((bool)ViewData["ShowHeader"]))
{
    Html.RenderPartial("Header");
} %>

这样你也不需要额外的内容占位符。