ASP.NET MVC 3 Razor:在头标签中包含JavaScript文件

238
我试图找出正确的Razor语法,以便将特定*.cshtml文件的JavaScript文件与在_Layout.cshtml中定义的所有其他包含文件一起放在标签中。

7
你还应该考虑将js放在页面底部而不是头部。 - Mattias Jakobsson
我发现示例代码唯一的问题是 @section "JavaScript" 不需要用引号括起来。 - Stephen Patten
2
还有一件事:如果这是一个JavaScript标签,请注意使用方式,我需要使用脚本元素的END标签才能使其正确运行。 <script type="text/javascript" src="@Url.Content("~/Scripts/RDA.js")"></script>; - Stephen Patten
@Mattias Jakobsson - 并不总是这样。这取决于具体情况。 - Dimskiy
@Dimskiy 如果你允许我成为一个挑剔的单词解析器,你应该确实始终考虑将js放在底部,无论你是否真正将其放置在那里。 - MrBoJangles
2个回答

411

你可以使用命名的区域

_Layout.cshtml

<head>
    <script type="text/javascript" src="@Url.Content("/Scripts/jquery-1.6.2.min.js")"></script>
    @RenderSection("JavaScript", required: false)
</head>

_SomeView.cshtml

@section JavaScript
{
   <script type="text/javascript" src="@Url.Content("/Scripts/SomeScript.js")"></script>
   <script type="text/javascript" src="@Url.Content("/Scripts/AnotherScript.js")"></script>
}

1
是的,我正在查看WebPageBase,并猜测那可能是答案,但不太清楚正确的语法。你能推荐一本MVC 3的参考指南吗?谢谢。 - Stephen Patten
8
哈!我希望有一份MVC 3和Razor语法的参考指南。我从Gu的博客中找到了上面的内容。对于MVC 3来说,最好的参考资料可能是发布说明。 - RPM1984
哦,关于<script>标签的闭合标签的好提示 - 我不知道这一点(还没有尝试使用JS命名部分)。现在我(和其他人)会知道了。 - RPM1984
4
FYI:JavaScript 应该被渲染在 </body> 标签之前,而不是 head 标签中。这样可以避免阻止浏览器的并行下载。详见 http://developer.yahoo.com/performance/rules.html。 - Peter
4
@Peter - 是的,我知道,但我只是在回答(JS在head标签中)时进行了说明。 - RPM1984
显示剩余4条评论

1

为了进一步阐述Stephen Patten的答案,并完全更改我之前的回答:

你可以在文件中的任何位置添加@RenderSection("JavaScript", required: false)代码行。这意味着它不必在head标签甚至footer标签中。在我正在工作的代码中,它在一个div中。

此外,您必须将此行代码放入包含脚本的部分的任何.cshtml文件的父文件中。这允许嵌套带有脚本的部分,而无需在原始父文件或子文件中包含所有脚本。换句话说,仅在“布局”或原始父文件中具有RenderSection代码并不会自动级联到嵌套的部分。

这样做的一个缺点是,您的脚本将分散在为浏览器呈现的HTML文件中。这可能会导致调试困难,包括意外地具有相同名称的多个脚本方法或多次包含相同的外部脚本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接