Я хочу связать конкретную таблицу стилей в определенных представлениях в дополнение к тому, что уже связано с _Layout.cshtml. Для не-Razor я вижу использование держателя содержимого. Как я могу сделать это для Razor?
Как я могу просматривать содержание <head> с помощью Asp.Net MVC 3 и Razor?
Ответ 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>
в вашем представлении.