2011-01-21 16 views
9

Se ho la seguente funzione jQuery (in un file esterno):ASP.NET MVC 3 - Possiamo utilizzare il modello Binding Over Chiamate jQuery AJAX?

function getResults(field1, field2, field3) { 
    $.get('/Search/GetResults', { id: field1, type: field2, blah: field3 }, function(data) { 
     $('#target').html(data); 
    }); 
} 

che riprende in sostanza una serie di campi dalla forma, li invia a un metodo di azione (che restituisce una PartialViewResult), e lega il risultato a un div target.

qui è che metodo di azione:

[HttpGet] 
public PartialViewResult GetResults(int id, int type, string blah) 
{ 
    var model = repository.GetResults(id, type, blah); 
    return PartialView("Results", model); 
} 

E 'possibile utilizzare il modello vincolante qui? Per esempio possiamo fare questo:

function getResults(someModel) { 
    $.get('/Search/GetResults', { model: someModel }, function(data) { 
     $('#target').html(data); 
    }); 
} 

E questo:

[HttpGet] 
public PartialViewResult GetResults(SearchPreferences prefs) 
{ 
    var model = repository.GetResults(prefs); 
    return PartialView("Results", model); 
} 

o devo costruire un oggetto JSON e passare che? Attualmente questi valori sono recuperati tramite individuale jQuery DOM chiamate:

var field1 = $('#field1').val(); 
var field2 = $('#field2').val(); 

L'obiettivo è quello di ridurre/semplificare il codice jQuery. Ho tutte quelle chiamate per prendere tutti i valori, quindi ho bisogno di passarli tutti come parametri.

Idealmente mi piacerebbe solo passare un oggetto.

Qualche consiglio?

EDIT: appena realizzato io possa essere in grado di utilizzare la nuova rilegatura JSON Modello caratteristica in ASP.NET MVC 3. Lettura su di esso ora ... (sentitevi liberi di rispondere in anticipo nel frattempo) .

risposta

4

In ASP.NET MVC 3, SÌ! Controlla this link, da TheGu stesso.

ASP.NET MVC 3 include ora incorporato supporto per la pubblicazione di JSON-based parametri dal lato client Javascript per metodi d'azione sul server . Ciò semplifica lo scambio di dati attraverso il client e il server e crea un front-end JavaScript ricco .

+0

lol, ho appena aggiunto quella modifica e sto leggendo lo stesso post mentre parliamo. :) – RPM1984

+0

Bello ... A volte faccio la stessa cosa! – Chaddeus

+0

Puoi anche controllare http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx – Chaddeus

1

Se si crea una classe che contiene le proprietà su cui si sta inviando, il raccoglitore modello predefinito eseguirà il kick in e assocerà i dati a tale classe. Nel tuo esempio, creare una classe:

public class SearchPreferences 
{ 
    public int id { get; set; } 

    public int type { get; set; } 

    public string blah { get; set; } 
} 

Poi nella vostra azione che può essere:

[HttpGet] 
public PartialViewResult GetResults(SearchPreferences prefs) 
{ 
    var model = repository.GetResults(prefs); 
    return PartialView("Results", model); 
} 

Essi chiave è quello di avere i nomi nei tuoi dati $ .get corrispondere ai nomi nella classe SerachPreferences .

+0

sì, sono consapevole di ciò - e io ** faccio ** ho quella classe. Ma con questo metodo ho ancora bisogno di passare tutti i singoli parametri, che è quello che sto cercando di evitare. – RPM1984

Problemi correlati