Как я могу получить вид <head>содержимого с использованием Asp.Net MVC 3 и Razor? - PullRequest
32 голосов
/ 19 января 2011

Я хочу связать конкретную таблицу стилей в определенных представлениях в дополнение к тому, что уже было связано в _Layout.cshtml. Для не-Razor, я вижу использование заполнителя содержимого. Как бы я сделал это для Razor?

Ответы [ 2 ]

45 голосов
/ 19 января 2011

Эквивалентными заполнителями контента в Razor являются разделы.

В вашем _Layout.cshtml:

<head>
@RenderSection("Styles", required: false)
</head>

Затем на странице вашего контента:

@section Styles {
    <link href="@Url.Content("~/Content/StandardSize.css")" />
}

Альтернативным решением было бы поместить ваши стили в ViewBag / ViewData:

В вашем _Layout.cshtml:

<head>
    @foreach(string style in ViewBag.Styles ?? new string[0]) {
        <link href="@Url.Content(style)" />
    }
</head>

И на вашей странице содержимого:

@{
    ViewBag.Styles = new[] { "~/Content/StandardSize.css" };
}

Это работает, потому что страница просмотра выполняется перед макетом.

0 голосов
/ 19 января 2011

Удивительно (для меня), asp: ContentPlaceHolder работает. Кажется, очень неразумно, хотя. Интересно, есть ли другой способ?

В частности, вы помещаете <asp:ContentPlaceHolder ID="HeadContent" runat="server" /> в _layout.cshtml и

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
    <link href="@Url.Content("~/Content/StandardSize.css")" rel="stylesheet" type="text/css" />
</asp:Content>

по вашему мнению.

...