2009-01-23 27 views

risposta

50

PartialViewResult viene utilizzato per il rendering di una vista parziale (solo un controllo utente). Questo è abbastanza elegante per AJAX roba, cioè

<script type="text/javascript"> 
    $.get(
     "/MyController/MyAction", 
     null, 
     function (data) { $("#target").html(data) } 
    ); 
</script> 

e l'azione

public ActionResult MyAction() 
{ 
    return PartialView("SomeView"); 
} 

dove SomeView è un controllo utente MVC, ad esempio:

<div> 
    <%= DateTime.Now.ToString() %> 
</div> 
+5

Ma perché è necessario? Puoi facilmente restituire un usercontrol con una normale vista ("SomeView")? –

+10

Direi: per lo più semantica. se si controlla l'origine Codeplex, entrambi erediteranno da ViewResultBase e la differenza principale è che ViewResult supporta la specifica della pagina master, PartialViewResult non è – veggerby

+27

Il punto importante è quello relativo alla pagina principale. Quando si utilizza PartialViewResult di solito si desidera restituire solo una porzione di markup, non un'intera pagina con tag DOCTYPE, , riferimenti di script e così via. È molto utile negli scenari Ajax. –

30

http://msmvps.com/blogs/luisabreu/archive/2008/09/16/the-mvc-platform-action-result-views.aspx

In pratica, userai il PartialViewResult per l'output di una parte piccola di una vista . Questo è il motivo per cui l' non ha le opzioni della pagina master quando ci si occupa di esse. Dall'altra parte , userete ViewResult per ottenendo una vista "completa". Come si può aspettare , la classe Controller espone diversi metodi che consentiranno di ridurre della quantità di necessaria per l'attivazione di questi tipi di risultati dell'azione .

in generale, ViewResult è per il rendering di una pagina con il maestro opzionale, e PartialViewResult è usato per controlli utente (probabilmente rispondere a una richiesta AJAX).

7

Esistono diversi casi in cui si desidera suddividere la visualizzazione in diversi piccoli componenti. Un caso d'uso con cui sto lavorando in questo momento, è che ho un sito multilingue che vorrei ricaricare i contenuti usando i principi AJAX.

Normalmente ciò che farei nel caso di un sito non multilingue è creare un altro ActionResult per restituire il ViewModel che sta cambiando con i nuovi parametri. Mi piace usare un ActionResult personalizzato che ho chiamato JsonpResult. Il problema risiede nel fatto che ho etichette non nel mio database ma nei file di risorse. Quindi quello che dovrei fare è in qualche modo idratare i miei dati del file di risorse nel ViewModel.

Una volta che i dati scendono dalla pipe, il mio callback AJAX gestisce il cablaggio della risposta ViewModel alla pagina HTML utilizzando Javascript (io uso jQuery).

Questo funziona sicuramente, ma diventa una questione di manutenibilità. Ora ho bisogno non solo di mantenere la mia vista ASP.NET originale, ma ho anche bisogno di mantenere una serie di script che gestiscono il comportamento AJAXian. Se hai bisogno di avere il tuo sito SEO, allora devi davvero assicurarti che sia il comportamento lato server che lato client funzionino entrambi allo stesso modo.

È qui che entrano in gioco le viste parziali. Quello che faccio è "estrarre" le sezioni di dati logici in cui si verifica la maggior parte della ricarica. La cosa bella di PartialView è che puoi passare ViewData e Model a PartialView. Se il tuo PartialView è fortemente digitato contro il tuo ViewModel puoi ottenere Intellisense per aiutare con il cablaggio di PartialView.

Ora tutto quello che devo fare con la mia chiamata AJAX è di scrivere la risposta su un singolo DIV piuttosto che gestire i punti dati singolarmente.Ciò che significa è che ci sarebbero più contenuti in arrivo. Tuttavia, il trade off è più facile da leggere e mantenere il codice.

17

nessuna delle risposte esistenti risponde effettivamente alla domanda "Qual è la differenza".

Le differenze sono i seguenti:

1) i luoghi in cui il motore di visualizzazione tenterà di trovare la vista:

  • per ViewResult, è in ViewLocationFormats e MasterLocationFormats
  • per PartialViewResult, è in PartialViewLocationFormats

2) ViewResult ha l'ulteriore proprietà MasterName

questo è tutto.

+1

È interessante che tu abbia risposto a questa domanda dopo 5 anni e ho aggiunto un altro voto in rialzo dopo 2 anni. – niksofteng

0

Una delle differenze principali è PartialViewResult non utilizza _ViewStart.cshtml. Il codice dal file _ViewStart.cshtml viene eseguito all'inizio del rendering prima di qualsiasi codice nella vista.

Problemi correlati