Asp.net mvc 3 我如何拥有特定于视图的<;头>;内容使用Asp.NETMVC3和Razor?

Asp.net mvc 3 我如何拥有特定于视图的<;头>;内容使用Asp.NETMVC3和Razor?,asp.net-mvc-3,razor,stylesheet,Asp.net Mvc 3,Razor,Stylesheet,除了在_Layout.cshtml中已经链接的内容之外,我还想在某些视图中链接特定的样式表。对于非Razor,我看到使用内容占位符。我该如何为Razor做到这一点?令人惊讶的是(对我来说),asp:ContentPlaceHolder确实有效。不过看起来很没礼貌。我想知道还有别的办法吗 具体来说,您可以将放在_layout.cshtml中,然后 <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="serv

除了在_Layout.cshtml中已经链接的内容之外,我还想在某些视图中链接特定的样式表。对于非Razor,我看到使用内容占位符。我该如何为Razor做到这一点?

令人惊讶的是(对我来说),asp:ContentPlaceHolder确实有效。不过看起来很没礼貌。我想知道还有别的办法吗

具体来说,您可以将
放在_layout.cshtml中,然后

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


在您看来。

Razor中的内容占位符等效于部分

在您的_Layout.cshtml中:

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

这是因为视图页面在布局之前执行。

在您看来,它才起作用。你看过生成的HTML了吗?你是对的。我只是看到应用了我想要的样式,但我没有检查HTML。我想知道Razor是如何处理服务器标记的。这也是向头部添加特定于视图的脚本引用的一种很好的方法。对于尚未将其解决方案转换为使用Razor的人来说,替代解决方案很好。谢谢
<head>
    @foreach(string style in ViewBag.Styles ?? new string[0]) {
        <link href="@Url.Content(style)" />
    }
</head>
@{
    ViewBag.Styles = new[] { "~/Content/StandardSize.css" };
}