Подтвердить что ты не робот

Как я могу просматривать содержание <head> с помощью Asp.Net MVC 3 и Razor?

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

4b9b3361

Ответ 1

Эквивалент заполнителей содержимого в 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" };
}

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

Ответ 2

Удивительно (для меня), 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>

в вашем представлении.