MVC 4 - 在哪里加载JS脚本

时间:2013-02-09 03:27:06

标签: javascript jquery asp.net-mvc

我对MVC很新,我注意到加载我编写并试图加载的js文件存在很多不一致。

首先,我的网站设置如下:

    _Layout.cshtml (main page)
Index.cshtml
_MainMenu.cshtml (partial view)

我在Layout的主体中渲染我的MainMenu。所有jquery脚本都加载在布局的页脚中(我在某处读取了比较喜欢的内容)。

当我渲染视图时,我会在视图顶部加载与该内容相关的任何特定脚本。

加载javascript文件的最佳方式是什么(无论是谷歌的cdn文件还是项目中包含的文件)?我应该将所有这些加载到我的布局页面的标题中,还是只在我使用它们时加载它们?有人可以在mvc应用程序中解释最佳实践并管理/加载/使用javascript文件。

感谢您的投入!

1 个答案:

答案 0 :(得分:10)

如果您使用Modernizr,请将其加载到头部。将您的其他脚本(包括jquery)加载到body的底部(除非另有说明 - 某些脚本需要head)。理想情况下,您的_Layout.cshtml看起来像:

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- head stuff -->
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    <!-- your entire body -->
    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
</html>

这样就会加载你的jQuery包,然后根据需要在每个页面加载自定义脚本的部分,比如(在其他.cshtml文件中):

@section Scripts {
    @Scripts.Render("~/bundles/myNiceBundle")
}

因此它会将您的自定义脚本放在jQuery下。

Obligatory reason for putting scripts at bottom of page

  

脚本引起的问题是它们会阻止并行下载。   HTTP / 1.1规范表明浏览器不再下载   每个主机名并行两个组件。如果您提供图像   从多个主机名,您可以获得两次以上的下载   在平行下。但是,在下载脚本时,浏览器不会   即使在不同的主机名上,也可以启动任何其他下载。