JQuery After Body ASP .NET MVC 4

我刚刚创建了一个ASP .NET MVC 4 WebAPI项目。

在查看默认的_Layout.cshtml时,我看到在渲染正文(不在头部)之后插入了jquery脚本。

     @ViewBag.Title @Styles.Render("~/Content/themes/base/css", "~/Content/css") @Scripts.Render("~/bundles/modernizr")   @RenderBody() @Scripts.Render("~/bundles/jquery") @RenderSection("scripts", required: false)   

这会导致错误

 $ is not defined 

当然,试着写

 $(document).ready(function() {...}). 

移动

 @Scripts.Render("~/bundles/jquery") 

进入_Layout.cshtml的head部分纠正问题,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

@Scripts.Render("~/bundles/jquery")导致MVC 4和VS 2010出现问题。当您尝试创建jQuery对话框时,此问题会变得更加明显。

正如JeffN825所述,唯一的出路就是注释掉@Scripts.Render("~/bundles/jquery")

现在众所周知的是: @Scripts.Render("~/bundles/jquery")评论出来的分支是什么?

我使用以下jquery库:

   

注意:jquery-1.7.2.min.js不起作用。

虽然接受的答案链接到有关如何执行此操作的详细信息,但更直接的答案如下:

_Layout.cshtml包含行…

 @RenderSection("scripts", required: false) 

…将在视图中插入一个名为“scripts”的部分 – 例如Index.cshtml:

 

This is Index.cshtml

@section scripts { }