2011-11-01 5 views
5

C'è codice C# che richiede un controller esistente, analizzare i suoi metodi di azione pubblica e generare una classe proxy JavaScript in modo che possa essere facilmente chiamato da altro codice JavaScript? So già che possiamo usare jQuery per fare un $ .post e $ .get di chiamare i nostri servizi di Ajax, ma credo che il processo può essere semplificato per non dover specificare l'URL relativo del URL del servizio web AJAX e un nome di parametro per ogni input dei parametri.Esiste un progetto che genera automaticamente codice proxy JavaScript per chiamare i metodi di azione ASP.NET MVC?

Per esempio, diciamo che abbiamo la seguente controller 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}; 
     } 
    } 

vorrei chiamare i metodi di azione AJAX del controller utilizzando la seguente moda.

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

Esiste un progetto che mi consente di farlo?

Aggiornamento

si scopre non c'è nessun progetto che fa quello che ho chiesto. Qualcosa che potrebbe essere utile, oltre a SignalR, è il progetto Controller Inspector di Phil Haack. Può ispezionare qualsiasi controller e rivelare quale metodo di azione ha, i parametri che accetta, i tipi, ecc.

Il seguente collegamento contiene il metodo getter per il recupero di dettagli su un determinato controller. https://github.com/Haacked/CodeHaacks/blob/master/src/MvcHaack.ControllerInspector/ControllerDetailer.cs

Aggiornamento 2

Doh. Phil Haack ha già sviluppato un proxy JavaScript. Il tutorial può essere trovato here.

risposta

1

Non so di un progetto che fa esattamente ciò che il vostro dopo, ma hai guardato SignalR da David Fowl? Questo progetto ha un generatore di proxy javascript basato su un hub SignalR anziché su un controller MVC. Sono sicuro che il codice può essere modificato però.

se si ottiene il codice sorgente da github e guardare il progetto di esempio c'è un campione chat room. Usando gli strumenti firebug/chrome dev ecc. Puoi vedere il javascript che viene chiamato.

Da quello che ho guardato il JavaScript viene creato attraverso un proxy. Nel progetto di esempio c'è una cartella "hub" che ha metodi che vengono inseriti in un file javascript tramite il proxy.

Il materiale del proxy effettivo viene eseguito nella libreria SignalR principale here, this è il generatore di proxy javascript predefinito utilizzato.

Si può vedere un esempio vivo della chat here, David Fowl è a volte in camera. Sono sicuro che può spiegare le cose del proxy molto meglio di me stesso.

+0

Sembra che tu hai l'unica e la migliore risposta a questa domanda. Ho visto SignalR prima ed è fantastico ma non penso che la sua produzione sia pronta. Cercherò di estrarre qualsiasi codice che posso da SignalR. Grazie! – burnt1ce

1

Phil Haack ha un progetto che risolve 1 dei miei bisogni. Richiede ancora l'associazione di ciascun parametro in ingresso con un nome parametro. Ecco un tutorial.

1

Questo eccellente un altro progetto consente fare ciò che hai chiesto.
http://jsnet.codeplex.com/
Questo oggetto genera automaticamente i proxy JavaScript per i controller MVC e WebApi.

Con questo progetto, avrete anche l'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); 

}); 
} 
Problemi correlati