2012-08-12 34 views
17

Tôi vừa tạo một dự án ASP .NET MVC 4 WebAPI.JQuery After Body ASP .NET MVC 4

Khi xem xét _Layout.cshtml mặc định, tôi thấy rằng tập lệnh jquery đang được chèn sau khi nội dung được hiển thị (không có trong đầu).

<!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> 

này gây ra lỗi

$ is not defined 

tất nhiên, cố gắng để viết

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

Di chuyển

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

vào phần đầu của sửa chữa _Layout.cshtml vấn đề và jquery wo rks như mong đợi.

Có chuyện gì? Tôi có làm điều gì đó sai và có một lý do cho vị trí mặc định của Script.Render bên trong _Layout.cshtml?

Trả lời

10

Khối tải và thực thi tập lệnh hiển thị trang.

Bạn có thể thấy điều này bằng cách thêm cảnh báo trong nhiều phần của trang. Đó là lý do tại sao nó được đề nghị để đặt các tập tin js ở mặt sau của trang.

Bạn cũng có thể khắc phục sự cố của mình bằng cách có một phần dành cho tập lệnh trang phía sau tập lệnh được thêm vào jquery, ở cuối trang.

Edit: Dưới đây là một bài báo từ Scott Guthrie về phần trong dao cạo: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

+0

Tôi làm cách nào để chỉ định điều này trong tệp cshtml của mình? – Jeff

+0

Tôi đã chỉnh sửa câu trả lời bằng một liên kết đến một bài viết giải thích các phần trong Razor. – linkerro

+0

thx để giúp tôi. Tôi đã phải đẩy tất cả các kịch bản khác trong quan điểm một phần đằng sau việc thực thi kịch bản chính jquery. – MUG4N

3

@Scripts.Render("~/bundles/jquery") đang gây ra một vấn đề với MVC 4 và VS 2010. Vấn đề này trở nên rõ ràng hơn khi bạn cố gắng để tạo ra hộp thoại jQuery.

Cách duy nhất là, như JeffN825 đã nêu, để nhận xét ra số @Scripts.Render("~/bundles/jquery").

Bây giờ, điều chưa biết là: phân đoạn nhận xét ra là gì @Scripts.Render("~/bundles/jquery")?

Tôi đang sử dụng các thư viện jquery sau:

<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> 

Lưu ý: jquery-1.7.2.min.js sẽ không hoạt động.

0

Mặc dù các liên kết câu trả lời chấp nhận chi tiết về cách vì vậy đây, một câu trả lời trực tiếp hơn sẽ như sau:

_Layout.cshtml chứa các dòng ...

@RenderSection("scripts", required: false) 

... mà sẽ chèn một phần có tên là "tập lệnh" được tìm thấy trong khung nhìn - ví dụ 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> 
} 
Các vấn đề liên quan