2010-02-10 26 views
7

Tôi có mã ajax cho asp.net (không phải mvc) để gọi tới một webMethod để nhận dữ liệu bổ sung từ máy chủ cho một yêu cầu. Nhưng tôi dường như không thể tìm ra các url để cung cấp cho JQuery của tôi trong MVC.Làm cách nào để gọi một phương thức điều khiển từ JQuery?

<script type="text/javascript" language="javascript"> 
function SubmitAjax(url, message, successFunc, errorFunc) { 
    $.ajax({ 
     type:"POST", 
     url:url, 
     data:message, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success:successFunc, 
     error:errorFunc 
     }); 

}; 

Tôi không muốn chuyển toàn bộ danh sách dữ liệu liên quan đến danh sách lựa chọn tới mọi người đến trang, vì không phải tất cả đều cần chức năng này. Vì vậy, tôi muốn gọi một bộ điều khiển hoặc webmethod thông qua JQuery, nhưng dường như không thể tìm ra cách để địa chỉ URL trong MVC.

tôi nhận thấy bài đăng này: JQuery Ajax call gets resolved to the current Controller Folder, Instead of root Folder

là $ .getJSON một phương pháp MVC? đây có phải là giải pháp tốt cho trường hợp sử dụng của tôi không? Tôi chỉ cần trả về một chuỗi url, hoặc một chuỗi rỗng nếu những gì tôi đang tìm không tìm thấy. Tôi có cần bao gồm một phương thức $ .getJSon không? là một phần của MVC hoặc một phần của JQuery? Là dấu gạch chéo hàng đầu sẽ trỏ đến gốc ứng dụng hoặc gốc máy chủ?

+0

MVC không phải là thư viện cụ thể có tên hàm thực tế. Nó là một thiết kế * mẫu * ... Trừ khi Microsoft thực sự đặt tên cho khuôn khổ mà ... mà họ có thể, hãy nghĩ về nó. Độc đáo không phải là bộ đồ mạnh mẽ của họ. (Googling rằng ...) - Nhưng trên quan điểm ... '$ .getJson' là một hàm jQuery để lấy dữ liệu JSON thông qua các yêu cầu AJAX. Không có gì cụ thể để làm với. Net. – Atli

+0

Url luôn là url. Nó không làm việc bất kỳ khác nhau trong asp.net MVC. –

+0

@Atli Tôi không chắc chắn phần nào bạn đang đề cập đến, ở trên cùng tôi đã đề cập đến Asp.net MVC, ở phía dưới tôi đã đề cập đến các javascripts Asp.net MVC đi kèm. – Maslow

Trả lời

0

Vấn đề là các Tag WebMethod trên bộ điều khiển, đó là cần thiết hoặc hữu ích trong asp.net, nhưng không phải trong asp.net MVC

3

Hãy thử bài này: Basic AJAX example with ASP.NET MVC?

hay này: How to get the Json object for drop down?

Họ sẽ cho bạn một số gợi ý.

Về bản chất, $ .getJson là một phương thức jQuery, không phải là một MVC, nhưng sử dụng muốn sử dụng kết hợp với bộ điều khiển MVC của bạn trả về kết quả Json.

+0

@ Johannes cảm ơn đây là url của tôi: '" Ticket/CheckForInstaller "' nhưng tôi không tìm thấy ... lớp điều khiển của tôi là 'TicketController' phương thức là' [WebMethod] Public ContentResult CheckForInstaller (int appId) 'nhưng chúng aren ' t xếp hàng. – Maslow

+0

@Maslow Bạn cần cung cấp thông số thích hợp cho hành động của mình. Hành động của bạn là "CheckForInstaller" và nó yêu cầu "appId".Nếu điều này được đăng ký trong tuyến đường của bạn, bạn chỉ có thể gọi "Ticket/CheckForInstaller/1" ("1" chỉ là một ví dụ về appId). Nếu chưa đăng ký, phải như sau: "Ticket/CheckForInstaller? AppId = 1" –

+1

trong ví dụ anh ấy đang sử dụng POST, vì vậy "appId" phải là thông số bài đăng (không hiển thị trong url). –

1

Bạn có thể sử dụng $ .getJSON (url, [dữ liệu], [gọi lại (dữ liệu)]) trong đó dữ liệu là đối tượng dữ liệu json được trả về của bạn.

Hoặc bạn có thể sử dụng $ .post (url, [dữ liệu], [gọi lại (dữ liệu)]) trong đó dữ liệu là đối tượng chuỗi/dữ liệu được returened của bạn.

url: đó là url tương đối với bộ điều khiển/hành động/tập lệnh trả về dữ liệu json/dữ liệu.

Ở trên là các phương pháp jquery và bạn có thể sử dụng shoul nếu bạn đã bao gồm tệp jquery js.

2

Vâng, tôi đoán là bạn đang gặp sự cố với cách url được tạo. Nếu bạn không có dấu gạch chéo trước url thì địa chỉ đó sẽ liên quan đến url hiện tại của bạn. Vì vậy, nếu url hiện tại là: /Home/Index và bạn có liên kết như sau: <a href="Ticket/CheckForInstaller">Text</a> thì liên kết đó sẽ trỏ đến url sau: /Home/Index/Ticket/CheckForInstaller. Đây luôn là hành vi trong trình duyệt. Điều tương tự cũng xảy ra nếu bạn có một trang trong một thư mục trong ứng dụng biểu mẫu web. Không có gì khác biệt với một url asp.net mvc sau đó với bất kỳ khuôn khổ web khác. Url bạn muốn có lẽ là url này: /Ticket/CheckForInstaller.

Khuôn khổ asp.net mvc, tuy nhiên, cung cấp cho bạn những người trợ giúp để bạn không phải mã cứng bất kỳ url nào. Bạn có thể làm điều đó như thế này:

<%=Url.Action("Ticket", "CheckForInstaller")%> 

Nhưng điều duy nhất này sẽ làm là tìm ra url thích hợp trỏ đến hành động ("/ vé/CheckForInstaller", tùy thuộc vào tuyến đường của bạn) và viết nó ra.

1

Đây là những gì tôi đã làm thời gian gần đây, và nó đã làm việc tốt .

  1. Lấy đường dẫn gốc và lưu nó trong một đầu vào ẩn (thay thế [với <)

    [input id = "urlBase" type = "hidden" value =" <% = Url.Content ("~")%>"/>

  2. Lấy giá trị của đầu vào đó và lưu nó trong js (sử dụng jquery trong trường hợp này)

    _urlBase = $ ("# urlBase") val().

  3. Sử dụng biến mà gọi điều khiển

    $ .ajax ({type: "GET", url: _urlBase + "Controller/Action", datatype: "json"});

Các vấn đề liên quan