I want to link a specific style sheet in certain Views in addition to what already gets linked in _Layout.cshtml. For non-Razor, I see using the content place holder. How would I do this for Razor?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
The equivalent of content placeholders in Razor are sections.
In your _Layout.cshtml:
<head>
@RenderSection("Styles", required: false)
</head>
Then in your content page:
@section Styles {
<link href="@Url.Content("~/Content/StandardSize.css")" />
}
An alternative solution would be to put your styles into ViewBag/ViewData:
In your _Layout.cshtml:
<head>
@foreach(string style in ViewBag.Styles ?? new string[0]) {
<link href="@Url.Content(style)" />
}
</head>
And in your content page:
@{
ViewBag.Styles = new[] { "~/Content/StandardSize.css" };
}
This works because the view page gets executed before the layout.
回答2:
Surprisingly (to me), asp:ContentPlaceHolder does work. Seems very unrazorish though. I wonder if there's another way?
Specifically, you put <asp:ContentPlaceHolder ID="HeadContent" runat="server" />
in your _layout.cshtml and
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<link href="@Url.Content("~/Content/StandardSize.css")" rel="stylesheet" type="text/css" />
</asp:Content>
in your view.