How Can I Have View-Specific <head> contents

2019-03-08 18:47发布

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?

2条回答
霸刀☆藐视天下
2楼-- · 2019-03-08 19:08

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.

查看更多
等我变得足够好
3楼-- · 2019-03-08 19:27

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.

查看更多
登录 后发表回答