2011-11-01 682 views
5

¿Hay código C# que tome un controlador existente, analice sus métodos de acción públicos y genere una clase proxy de JavaScript para que pueda ser llamado fácilmente por otro código JavaScript? Ya sé que podemos usar jquery para hacer $ .post y $ .get para llamar a nuestros servicios de ajax, pero creo que el proceso se puede simplificar al no tener que especificar la URL relativa de la URL del servicio web de AJAX y un nombre de parámetro para cada uno entrada de parámetros¿Hay algún proyecto que genere código proxy de JavaScript automáticamente para llamar a los métodos de acción ASP.NET MVC?

Por ejemplo, supongamos que tenemos el siguiente controlador C#:

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

quisiera llamar a los métodos de acción AJAX del controlador mediante el uso de la siguiente manera.

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

¿Existe un proyecto que me permita hacer esto?

actualización

resulta que no hay proyecto que hace lo que yo pedí. Algo que podría ser útil, además de SignalR, es el proyecto Inspector de controladores de Phil Haack. Se puede inspeccionar cualquier controlador dado y revelar lo método de acción que tiene, los parámetros que acepta, sus tipos, etc.

El siguiente enlace contiene el método getter para recuperar una detalles acerca de un controlador dado. https://github.com/Haacked/CodeHaacks/blob/master/src/MvcHaack.ControllerInspector/ControllerDetailer.cs

Actualización 2

Doh. Phil Haack ya desarrolló un proxy de JavaScript. Tutorial se puede encontrar here.

Respuesta

1

No sé de un proyecto que haga exactamente lo que buscas pero ¿has mirado SignalR de David Fowl? Este proyecto tiene un generador de proxy javascript basado en un concentrador SignalR en lugar de un controlador MVC. Estoy seguro de que el código puede ser modificado sin embargo.

Si obtiene el código fuente de github y mira el proyecto de ejemplo, hay un ejemplo de sala de chat. Utilizando las herramientas de desarrollo firebug/chrome, etc., puede ver el javascript al que se llama.

Por lo que he visto, el javascript se crea a través de un proxy. En el proyecto de ejemplo, hay una carpeta "hubs" que tiene métodos que se insertan en un archivo javascript a través del proxy.

El material de proxy real se realiza en el núcleo de la biblioteca SignalR here, this es el generador de proxy javascript predeterminado utilizado.

Puedes ver una muestra en vivo del chat here, David Fowl a veces también está en la habitación. Estoy seguro de que puede explicar las cosas del poder mucho mejor que yo.

+0

Parece que usted tiene la única y mejor respuesta a esta pregunta. He visto SignalR antes y es genial, pero no creo que su producción esté lista. Trataré de extraer cualquier código que pueda de SignalR. ¡Gracias! – burnt1ce

1

Phil Haack tiene un proyecto que resuelve 1 de mis necesidades. Todavía requiere vincular cada entrada de parámetro con un nombre de parámetro. Aquí hay un tutorial.

1

Este excelente otro proyecto que permite para hacer lo que pediste
http://jsnet.codeplex.com/
Este poject genera automáticamente los proxies de JavaScript para los controladores MVC y WebApi.

Con este proyecto, también tendrá el 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); 

}); 
} 
Cuestiones relacionadas