Автоматически отображать общий вид как часть главной страницы? - PullRequest
1 голос
/ 15 декабря 2011

У меня есть общее представление, расположенное в 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>

Можно ли как-то эффективно выполнить вышеперечисленное, кроме как из контроллера, обрабатывающего запрос (или дочерний класс ViewPage)?

1 Ответ

0 голосов
/ 15 декабря 2011

Если вы хотите сделать это из контроллера, то вы можете передать свойство в ViewData, которое может быть выбрано со страницы макета. Например. в действии контроллера:

ViewData["ShowHeader"] = true;

Тогда на странице макета вы могли бы сказать

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

Таким образом, вам не нужен дополнительный заполнитель контента.

...