我刚刚创建了一个ASP.NET MVC 4 WebAPI项目。
在查看默认的_Layout.cshtml时,我看到jquery脚本在body被渲染之后被插入(不在头部)。
<!DOCTYPE html>
<html>
<head>
<Meta charset="utf-8" />
<Meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Styles.Render("~/Content/themes/base/css","~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
@RenderBody()
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts",required: false)
</body>
</html>
这会导致错误
$ is not defined
当然,试图写
$(document).ready(function() {...}).
移动
@Scripts.Render("~/bundles/jquery")
进入_Layout.cshtml的头部分会纠正问题,jquery按预期工作。
这是怎么回事?我做错了,还有一个原因是_Layout.cshtml中Script.Render的默认位置?
解决方法
脚本加载和执行阻止页面的呈现。
您可以通过在页面的多个部分添加警报来查看此信息。这就是为什么建议将js文件放在页面的后面。
您还可以通过在页面末尾添加一个页面脚本添加jquery的部分来解决问题。
编辑:这是Scott Guthrie关于剃刀:http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx部分的文章