2011-11-01 29 views
5

Có mã C# nào cần một bộ điều khiển hiện có, phân tích các phương thức Hành động công khai của nó và tạo lớp proxy JavaScript để nó có thể dễ dàng được gọi bằng mã Javascript khác không? Tôi đã biết chúng tôi có thể sử dụng jquery để thực hiện một $ .post và $ .get để gọi các dịch vụ ajax của chúng tôi nhưng tôi tin rằng quá trình có thể được đơn giản hóa bằng cách không phải chỉ định url tương đối của URL dịch vụ web AJAX và tên thông số cho mỗi đầu vào tham số.Có dự án nào tự động tạo mã proxy JavaScript để gọi các phương thức hành động ASP.NET MVC không?

Ví dụ, giả sử chúng ta có C# điều khiển sau:

public class CustomerController : Controller 
    { 

     public JsonResult Create(string name, string address) 
     { 
      return new JsonResult {Data = 11111}; 
     } 

     public JsonResult Update(int id, string name, string address) 
     { 
      return new JsonResult {Data = true}; 
     } 
    } 

Tôi muốn gọi các phương thức hành động AJAX của bộ điều khiển bằng cách sử dụng thời trang sau.

Proxy.Customer.Create("Scott Gu", "Somewhere in Redmond").done(function(id) { 
     /* id is an int and not an string */ 
     Proxy.Customer.Update(id, "Scott Gu", "Somewhere in Seattle"); 
}); 

Dự án có tồn tại cho phép tôi thực hiện việc này không?

Cập nhật

nó quay ra không có dự án nào những gì tôi yêu cầu. Một cái gì đó có thể được sử dụng, bên cạnh SignalR, là dự án Kiểm soát viên của Phil Haack. Nó có thể kiểm tra bất kỳ bộ điều khiển cụ thể nào và cho biết phương thức hành động nào có, các tham số mà nó chấp nhận, loại của chúng, v.v.

Liên kết sau chứa phương thức getter để lấy chi tiết về bộ điều khiển đã cho. https://github.com/Haacked/CodeHaacks/blob/master/src/MvcHaack.ControllerInspector/ControllerDetailer.cs

Cập nhật 2

Doh. Phil Haack đã phát triển một proxy JavaScript. Hướng dẫn có thể được tìm thấy here.

Trả lời

1

Tôi không biết dự án nào thực hiện chính xác những gì sau nhưng bạn đã xem SignalR bởi David Fowl? Dự án này có một trình tạo proxy javascript dựa trên một trung tâm SignalR thay vì một bộ điều khiển MVC. Tôi chắc rằng mã có thể được sửa đổi mặc dù.

Nếu bạn lấy mã nguồn từ github và xem dự án mẫu có mẫu phòng chat. Sử dụng công cụ firebug/chrome dev, bạn có thể thấy javascript được gọi.

Từ những gì tôi đã xem javascript được tạo thông qua proxy. Trong dự án mẫu có một thư mục "hub" có các phương thức được chèn vào một tệp javascript thông qua proxy.

Công cụ proxy thực tế được thực hiện trong thư viện SignalR lõi here, this là trình tạo proxy proxy mặc định được sử dụng.

Bạn có thể xem mẫu trực tiếp của cuộc trò chuyện here, đôi khi David Fowl cũng ở trong phòng. Tôi chắc rằng anh ấy có thể giải thích những thứ proxy tốt hơn tôi nhiều.

+0

Dường như bạn có câu trả lời duy nhất và tốt nhất cho câu hỏi này. Tôi đã nhìn thấy SignalR trước và nó là tuyệt vời nhưng tôi chỉ không nghĩ rằng sản xuất của nó đã sẵn sàng. Tôi sẽ cố gắng trích xuất bất kỳ mã tôi có thể từ SignalR. Cảm ơn! – burnt1ce

1

Phil Haack có một dự án giải quyết 1 trong những nhu cầu của tôi. Nó vẫn yêu cầu ghép nối mỗi đầu vào tham số với tên tham số. Đây là tutorial.

1

dự án khác này tuyệt vời cho phép bạn để làm những gì bạn yêu cầu.
http://jsnet.codeplex.com/
Dự án này tự động tạo proxy JavaScript cho bộ điều khiển MVC và WebApi.

Với dự án này, bạn cũng sẽ có Intellisense.

Example

window.test = function test() { 
/// <summary> 
///This example works. 
///You have the Intellisense. It's great!!! 
///No hard coded url. 
///</summary> 

//-- settings of ajax request. 
var a = $dpUrlSet.Customer.Create.$action0.$AjaxSettings(); 

//-- your parameters of action method 
a.data.name = "Scott Gu"; 
a.data.address = "Somewhere in Redmond"; 

//-- stringify 
a.data = JSON.stringify(a.data); 

//-- send ajax request 
var xhr = $.ajax(a); 

xhr.success(function (id) { 
    /// <summary>Response of ajax request</summary> 

    //-- settings of ajax request. 
    var a = $dpUrlSet.Customer.Update.$action0.$AjaxSettings(); 

    //-- your parameters of action method 
    a.data.id = id; 
    a.data.name = "Scott Gu"; 
    a.data.address = "Somewhere in Seattle"; 

    //-- stringify 
    a.data = JSON.stringify(a.data); 

    //-- send ajax request 
    var xhr = $.ajax(a); 

}); 
} 
Các vấn đề liên quan