2011-12-15 80 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