2011-12-13 17 views
10

Ho un sito con una barra di navigazione definita nel layout. La barra di navigazione viene utilizzata in diverse viste del sito e presenta alcuni contenuti dinamici generati da un paio di query nel database.ASP.NET MVC: utilizzare Html.Partial o Html.Action?

Mi chiedo quale sia la procedura migliore per eseguire il rendering di questo menu (definito in una vista parziale).

Per quanto ne so che posso farlo in due modi, con alcuni vantaggi e svantaggi per ognuno:

Utilizzando Html.Action: + E 'completamente indipendente dal punto di vista che sta utilizzando il layout - Aggiunge una richiesta in più per il rendering di una sezione della pagina - Sto aggiungendo un metodo Action che restituisce una vista parziale che non viene chiamata da Ajax.

Utilizzando Html.Partial: + una semplice richiesta di rendere l'intera vista - Ogni modello vista deve contenere le informazioni necessarie per la barra di navigazione

Vorrei davvero apprezzare le vostre intuizioni su questo dato che ho diversi scenari come questo sul mio sito e non sono sicuro quale sia il migliore.

Grazie!

risposta

14

Vorrei utilizzare Html.Action soprattutto se questo menu contiene alcuni dati dinamici che vengono recuperati dal database. Il vantaggio è che puoi dissociare completamente questo recupero in un'azione completamente separata da quella principale. Inoltre, è possibile memorizzare nella cache l'output di azioni figlio decorandole con l'attributo [OutputCache]. In questo modo è possibile ridurre il carico sul database se i dati non cambiano abbastanza spesso.

Si aggiunge una richiesta in più per rendere una sezione della pagina

Deve aver capito male qualcosa al riguardo. Non ci sono richieste aggiuntive da parte del cliente. Tutto è servito in una singola richiesta. Esiste un'istanza di controllo aggiuntiva e un'esecuzione dell'azione ma non una nuova richiesta HTTP dal client. È come se 2 azioni controller fossero eseguite nella stessa richiesta e il loro risultato fosse aggregato in una singola pagina HTML inviata al client.

+0

Anche se è vero che esegue una sola richiesta HTTP, è anche vero che il sovraccarico del rendering di un'azione supera quello del rendering parziale. –

+4

@NathanTaylor, è vero. C'è un sovraccarico che supera quello del rendering parziale. Ma questo overhead è così mooooolto trascurabile rispetto a tutti i benefici che si ottengono dall'usare azioni da bambini che dovremmo semplicemente accettarlo. Voglio dire, si ottiene separazione delle preoccupazioni, si ottiene il codice pulito, si ottiene il caching che esalta le prestazioni di rendering parziale, quindi, si, usa Html.Action. –

+0

Sicuramente non sono d'accordo, sto solo mettendo in evidenza i fatti. Html.Azione FTW. –

Problemi correlati