2011-02-14 25 views
12

questa potrebbe essere una domanda facile ma per me in questo momento non è chiaro e devo sistemare le cose nella mia testa ... forse qualcuno può aiutarmi con quello =). ..jquery ajax forms per ASP.NET MVC 3

So che MVC viene fornito con Helpers Ajax. So che c'è la libreria Microsoft e c'è anche jquery. So che con MVC 3 hanno introdotto un discreto javascript che aggiunge alcuni tag speciali a html per cleannes ...

ma come funziona insieme?

Esempio: Desidero inviare un modulo remoto (vista parziale) per ajax per aggiungere commenti a un post del blog. senza postare indietro tutta la pagina.

nella mia vista parziale dovrei usare Ajax.BeginForm() è quindi MvcAjax o Jquery? O dovrei usare Html.BeginForm() e registrare qualcosa come $ .post sull'evento click del Form. Questo sarebbe anche un fallback di plain html se javascript è disabilitato o non supportato ....

O in generale quando utilizzare cosa per postare commenti su un post di un blog? ... e presumo che sia corretto, che sto postando all'azione di creazione del commentatorcontroller e vorrei usare JsonModelBinder per trasformarlo in un modello. Dopo di ciò restituirei Json e lo aggiungerei al mio elenco di commenti ...

E 'questo ragionevole motivo di farlo?

risposta

30

Ajax.BeginForm() è questo quindi MvcAjax o Jquery?

Per impostazione predefinita è jquery. È necessario fare riferimento allo script jquery.unobtrusive-ajax.js affinché funzioni.

Oppure dovrei usare Html.BeginForm() e registrare qualcosa come $ .post sull'evento click del modulo.

Questa è un'alternativa. Personalmente è quello che faccio.

Suppongo che sia corretto, che sto postando all'azione di creazione del controllore commenti e vorrei utilizzare il JsonModelBinder per trasformarlo in un modello. Dopo che sarei tornato JSON e vorrei aggiungerlo alla mia lista commenti ...

Il JsonModelBinder è stato introdotto in ASP.NET MVC 3 e permette di inviare una stringa JSON ad un'azione di controllo che sarà mappato a un modello di vista. Per esempio, se si ha la seguente vista del modello:

public class PersonViewModel 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

e le seguenti azioni:

public ActionResult Foo(PersonViewModel person) 
{ 
    ...  
} 

il modo tradizionale per invocarlo in AJAX è:

$.ajax({ 
    url: '@Url.Action("foo")', 
    type: 'POST', 
    data: { name: 'john', age: 20 }, 
    success: function(result) { 
     // TODO: 
    } 
}); 

e in ASP.NET MVC 3 è possibile inviare un JSON come parametro di richiesta che sarà legato al parametro PersonViewModel azione:

$.ajax({ 
    url: '@Url.Action("foo")', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({ name: 'john', age: 20 }), 
    success: function(result) { 
     // TODO: 
    } 
}); 
+2

'JSON.stringify' era la parte che mi serviva ... thx! – Trev

+0

Si noti che se si registra su MVC i dati ottenuti dal modulo acquisendo un evento di invio, ad es. $ ("# some_form"). submit (function() {var data = $ (this) .serialize(); ... $ .ajax ({... Il tipo di contenuto dell'esempio di Darin dovrebbe essere rimosso perché funzioni in questo scenario: –

+0

Interessante, darò un'occhiata a JsonModelBinder – Rushino