我刚刚创建了一个 ASP .NET MVC 4 WebAPI 项目。
在查看默认的 _Layout.cshtml 时,我发现 jquery 脚本是在渲染主体之后插入的(而不是在头部)。
<!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 的 head 部分可以纠正问题,并且 jquery 按预期工作。
怎么了?我是否做错了什么,并且 _Layout.cshtml 中 Script.Render 的默认位置是有原因的?
最佳答案
脚本加载和执行会阻止页面的渲染。
您可以通过在页面的多个部分添加提醒来查看这一点。这就是为什么建议将js文件放在页面的后面。
您还可以通过在页面末尾添加 jquery 的页面脚本后面添加一个页面脚本部分来解决您的问题。
编辑:这是 Scott Guthrie 撰写的一篇有关 razor 中各部分的文章:http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx
关于JQuery After Body ASP .NET MVC 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11926405/