2011-11-01 6 views
5

Czy istnieje kod C#, który pobiera istniejący kontroler, analizuje jego publiczne metody działania i generuje klasę proxy JavaScript, aby można ją było łatwo wywołać za pomocą innego kodu JavaScript? Wiem już, że możemy użyć jquery do wykonania $ .post i $ .get, aby wywołać nasze usługi ajaxowe, ale uważam, że proces można uprościć, nie określając względnego adresu URL usługi WWW AJAX i nazwy parametru dla każdego z nich. wprowadzenie parametrów.Czy istnieje projekt, który automatycznie generuje kod JavaScript w celu wywołania metod działania ASP.NET MVC?

Na przykład, załóżmy, że mamy następującą C# kontroler:

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

chciałbym wywołania AJAX metod działania sterownika za pomocą następujący sposób.

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"); 
}); 

Czy istnieje projekt, który pozwoli mi to zrobić?

Aktualizacja

okazuje się, że nie ma projekt, który robi to, co prosiłem. Coś, co mogłoby być użyteczne, oprócz SignalR, to projekt kontrolera Phila Haacka. Może sprawdzać dowolny kontroler i ujawniać, jaką ma metodę działania, parametry, które akceptuje, ich typy itp.

Poniższy link zawiera metodę gettera do pobierania szczegółowych informacji o danym kontrolerze. https://github.com/Haacked/CodeHaacks/blob/master/src/MvcHaack.ControllerInspector/ControllerDetailer.cs

Aktualizacja 2

Doh. Phil Haack opracował już serwer proxy JavaScript. Tutorial można znaleźć here.

Odpowiedz

1

Nie wiem o projekcie, który robi dokładnie to, co po, ale patrzysz na SignalR przez Davida Fowl? Ten projekt ma generator proxy javascript oparty na koncentratorze SignalR zamiast na kontrolerze MVC. Jestem pewien, że kod można zmodyfikować.

Jeśli otrzymasz kod źródłowy z github i przyjrzysz się przykładowemu projektowi, znajdziesz przykład pokoju rozmów. Używając firebug/chrome dev narzędzi itp. Możesz zobaczyć javascript, który jest wywoływany.

Z tego, co zobaczyłem, javascript jest tworzony przez proxy. W przykładowym projekcie znajduje się folder "hubs", który ma metody wstawiane do pliku javascript za pośrednictwem proxy.

Rzeczywiste pliki proxy są wykonywane w rdzeniowej bibliotece SignalR here, this to domyślny generator proxy javascript.

Możesz zobaczyć na żywo próbkę czat here, David Fowl jest czasami w pokoju, jak również. Jestem pewna, że ​​potrafi wyjaśnić, czym jest proxy, znacznie lepiej niż ja.

+0

Wygląda na to masz jedyną i najlepszą odpowiedzią na to pytanie. Widziałem wcześniej SignalR i jest świetny, ale po prostu nie sądzę, żeby jego produkcja była gotowa. Spróbuję wyodrębnić kod z SignalR. Dzięki! – burnt1ce

1

Phil Haack ma projekt, który rozwiązuje 1 z moich potrzeb. Nadal wymaga parowania każdego wejścia parametru z nazwą parametru. Oto tutorial.

1

To doskonała kolejny projekt pozwala robić to, o co prosiłeś.
http://jsnet.codeplex.com/ Ten pojekt automatycznie generuje proxy JavaScript dla kontrolerów MVC i WebApi.

Za pomocą tego projektu otrzymasz także 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); 

}); 
} 
Powiązane problemy