2012-08-12 128 views
17

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

在查看默认的_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校正的头部问题和jquery窝如预期的那样。

这是怎么回事?我做错了什么,并且在_Layout.cshtml里有一个Script.Render默认位置的原因?

回答

10

脚本加载并执行阻止页面的呈现。

您可以通过在页面的多个部分添加警报来查看此信息。这就是为什么建议将js文件放在页面的后面。

您还可以通过在页面末尾添加一个页面脚本部分来解决您的问题,该部分位于添加了jquery的页面脚本之后。

编辑:下面是斯科特·格思里在剃刀的一篇文章有​​关章节:http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

+0

我该如何在我的cshtml文件中指定这个? – Jeff 2012-08-12 22:46:33

+0

我编辑了答案,并链接到了一篇文章,解释了Razor中的部分。 – linkerro 2012-08-12 22:50:17

+0

thx帮助我。我必须在执行jquery主脚本后的部分视图中推送所有其他脚本。 – MUG4N 2012-11-28 09:22:23

3

@Scripts.Render("~/bundles/jquery")导致问题与MVC 4和VS 2010年,当您尝试创建jQuery的对话,这个问题变得更加明显。

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

现在未知的是:注释的分歧是什么@Scripts.Render("~/bundles/jquery")

我使用以下的jQuery库:

<script src="../../Scripts/jquery-1.7.2.min.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery-ui-1.8.23.min.js" type="text/javascript"></script> 

注:jQuery的1.7.2.min.js将无法正常工作。

0

虽然有关如何使这一点,更直接的答案是如下接受的答案链接到的详细信息:

_Layout.cshtml包含行...

@RenderSection("scripts", required: false) 

...这会在视图中插入一个名为“scripts”的部分 - 例如Index.cshtml:

<p>This is Index.cshtml</p> 
@section scripts { 
    <script> 
     $(document).ready(function() { 
     alert("This script is inserted by RenderSection after jQuery script is inserted.") 
     }) 
    </script> 
}