2011-12-15 82 views
1

我有一个位于Shared/Header.aspx的共享视图,我想把它作为HeaderContent ContentPlaceHolder的一部分。我的母版页包含:自动将共享视图渲染为母版页的一部分?

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

,我希望能够告诉MVC来填充内容占位与共享/头视图,其中包含:

<%@ 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> 

有没有什么办法可以有效地做到以上,但是从Controlle处理请求(或ViewPage的子类)?

回答

0

如果您想从控制器执行此操作,那么您可以在ViewData中传递一个属性,该属性可以从布局页面中拾取。例如。在控制器的行动:

ViewData["ShowHeader"] = true; 

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

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

这样就不需要额外的内容占位符太。

+0

问题是,如果我在母版页中使用Html.RenderPartial,它会尝试使用母版页呈现部分内容并导致堆栈溢出(因为它正在递归)。我只想渲染HeaderContent,而不必在呈现时将它包装在母版页中。 – 2011-12-16 01:06:30