2012-03-29 30 views
16

Tôi hỏi một câu hỏi tương tự hereDarin Dimitrov trả lời rằng chúng tôi không thể sử dụng trình trợ giúp url như $.ajax({ url: '@Url.Action("Index")', . . . trong tệp js riêng biệt. đề nghị sử dụng trợ giúp Url trong trang xem và chuyển nó vào javascript, tôi không muốn sử dụng url mã cứng, tôi cần phải tìm nó với trợ giúp url.Sử dụng tập tin Seprate js Và sử dụng Url Helpers trong nó với ASP.NEt MVC 3 và Razor View Engine

Trả lời

30

Sử dụng một lĩnh vực tiềm ẩn để lưu trữ của bạn url, sau đó sử dụng javascript để đọc trường ẩn, sau đó sử dụng nó trong mã của bạn. Bằng cách đó bạn có thể giữ tệp JS riêng biệt với chế độ xem. Một cái gì đó như thế này:

//In Your View 
    @Html.Hidden("MyURL", Url.Action("Index")) 

//In Your JS 
    var myUrl = $("#MyURL").val(); 

    $.ajax({ url: myUrl , . . . 
+0

Đề xuất tuyệt vời !! –

+0

Bạn có cho rằng điều này có thể mở lỗ hổng bảo mật trong ứng dụng không? Một hacker có thể thay thế URL mục tiêu trên máy chủ bằng cách thay đổi giá trị của các trường ẩn! – Mosh

+4

@Mosh Mọi thứ trong trang web đều có thể được sửa đổi bởi một hacker, bao gồm cả các tệp JavaScript trước khi chúng chạy. Bạn không thể dừng điều này (ngay cả với mã hóa). Thời gian duy nhất đây sẽ là một vấn đề là nếu một hacker có thể sửa đổi giá trị của những trường ẩn đó cho những người khác_. – Pluto

8

Cách đơn giản nhất chỉ là để tạo ra một biến toàn cầu được gọi là một cái gì đó và chỉ cần tham khảo để nó ở bên ngoài JS

var baseURL = '@Url.Action("Index")'; 

của bạn Bên trong JS bên ngoài của bạn

$.ajax({ url: baseURL + "Action" 
+0

thực hành tốt nhất là không gian tên biến toàn cục của bạn '' ' nếu { window.myProject = {} (window.myProject!); } myProject.baseURL = '@ Url.Action ("Index")'; '' ' – Josiah

5

Bạn có thể sử dụng RazorJS cho mục đích đó. Nó cho phép viết Razor-Style C# hoặc VB.NET bên trong các tệp JavaScript của bạn. Có một mô tả ngắn có sẵn here.

+0

URL mô tả được cung cấp không hợp lệ ngay bây giờ. Bạn có thể kiểm tra điều đó không? Vui lòng cập nhật URL nếu bạn biết. Tôi cũng cần điều đó. Cảm ơn trước. –

0

Hãy xem Generating External JavaScript Files Using Partial Razor Views. Trong bài đăng trên blog này, tôi mô tả cách bạn có thể sử dụng chế độ xem Razor thông thường và bộ lọc hành động tùy chỉnh để hiển thị các tệp JavaScript bên ngoài có thể có mã Razor trong chúng.

2

Không cần phải có trường ẩn, thậm chí điều này cũng hoạt động trong tệp .js bên ngoài.

var myUrl =/ControllerName/ActionName;

$.ajax({ url: myUrl , . . 
0

Tôi đã sử dụng cách tiếp cận tương tự với raklos, nhưng đang tìm cách lấy đường dẫn thư mục gốc ở tất cả các địa điểm, vì vậy tôi đã đi với mã bên dưới.

@Html.Hidden("AppUrl", Url.Content("~")) 
Các vấn đề liên quan