2011-10-05 25 views
6

ho questa situazione:ASP.NET MVC pagina di carico con AJAX

Una pagina con una fisarmonica con 2 schede, si ha un elenco di PaymentMethods, il secondo ha un riepilogo dell'ordine con OrderLines, gli importi ei totali (reso come partialview). La selezione di un metodo di pagamento fa sì che i totali dell'ordine vengano ricalcolati, potrebbero essere applicati costi aggiuntivi ecc.

Qual è il modo consigliato di visualizzare i nuovi ordini in sequenza dopo aver selezionato un metodo di pagamento, utilizzando AJAX?

Fare una chiamata AJAX e ottenere tutti i nuovi importi, ordini, ecc. E impostare questi valori usando JS mi sembra inefficiente. La situazione ideale sarebbe se potessi effettuare una chiamata AJAX con il metodo di pagamento selezionato e questa chiamata restituirebbe l'HTML che posso usare per sostituire il vecchio riepilogo.

È errato eseguire il rendering di una vista parziale su HTML sul server e restituirlo utilizzando JSON? Qual è la migliore pratica per questa situazione?

risposta

2

Nel tuo metodo di azione di ritorno un PartialView([view name]).

Poi si può fare questo con jQuery:

var req = $.ajax({ 
    type:"GET",//or "POST" or whatever 
    url:"[action method url]" 
    }).success(function(responseData){ 
    $('targetelement').append($(responseData));}); 

Dove 'targetelement' è un selettore per l'elemento in cui si desidera iniettare il contenuto.

Si consiglia di eseguire $('targetelement').html(''); prima di aggiungere la risposta all'elemento di destinazione.

Aggiornamento

O, meglio ancora, utilizzare .load dalla risposta di Rick.

+0

Doh Non ho mai capito che potevi solo restituire una partialview! Grazie (ad entrambi)! – jaap

+1

Invece di usare append puoi usare replaceWith o semplicemente $ ("# element"). Load (...) – kubal5003

+0

sì ho notato che dalla risposta di @ rick :) impari qualcosa di nuovo ogni giorno. –

9

devo un esempio qui:

Javascript

$("#divForPartialView").load("/HelloWorld/GetAwesomePartialView", 
    { param1: "hello", param2: 22}, function() { 
    //do other cool client side stuff 
}); 

azione controller

public ActionResult GetAwesomePartialView(string param1, int param2) 
{ 
    //do some database magic 
    CustomDTO dto = DAL.GetData(param1, param2); 

    return PartialView("AwesomePartialView",dto); 
} 
+0

È [il tuo link] (http://blog.devlpr.net/2011/01/03/jquery-load-with-mvc-2-partialviews/) in vendita? – xameeramir

+0

anche tu puoi usare '@ Url.Action ("GetAwesomePartialView", "HelloWorld")' invece di "/ HelloWorld/GetAwesomePartialView" –