2012-08-12 129 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> 
}