从局部视图向页面的<head>添加CSS引用

kri*_*ian 11 c# asp.net-mvc partial-views webforms-view-engine asp.net-mvc-2

有没有办法从局部视图添加CSS引用到页面,并让它们在页面中呈现<head>(根据HTML 4.01规范的要求)?

Ric*_*ner 5

如果您正在使用MVC3和Razor,则将每页项目添加到您的部分的最佳方法是:1)从布局页面中调用RenderSection()2)在子页面中声明相应的部分:

/Views/Shared/_Layout.cshtml:

<head>
    <!-- ... Rest of your head section here ... ->
    @RenderSection("HeadArea")
</head>
Run Code Online (Sandbox Code Playgroud)

/Views/Entries/Index.cshtml:

@section HeadArea {
    <link rel="Stylesheet" type="text/css" href="/Entries/Entries.css" />
}
Run Code Online (Sandbox Code Playgroud)

然后,生成的HTML页面包含一个如下所示的部分:

<head>
    <!-- ... Rest of your head section here ... ->
    <link rel="Stylesheet" type="text/css" href="/Entries/Entries.css" />
<head>
Run Code Online (Sandbox Code Playgroud)

  • @Richard,你在这里描述的并不针对OP的问题,他在讨论局部视图,而`_Layout.cshtml`是一个布局,而不是局部视图(对于`index.cshtml中包含的实例) ,并希望将脚本直接呈现到`_layout.cshtml`的`<head>`标记中. (3认同)
  • 如果不是所有视图都有“HeadArea”,那些没有“HeadArea”的视图将会抛出错误。为了避免这种情况,请在`_Layout.cshtml`中使用`@RenderSection("HeadArea", required:false)`。 (2认同)

kri*_*ian 1

您可以使用 aHttpModule来操作响应 HTML 并将任何 CSS/脚本引用移动到适当的位置。这并不理想,而且我不确定对性能的影响,但这似乎是解决问题的唯一方法,而无需 (a) 基于 javascript 的解决方案,或 (b) 违反 MVC 原则。