2012-11-10 9 views
18

sto iniziando l'apprendimento MVC4. Ho trovato le due possibilità di creare una vista basata su un modello di rasoio o una pagina master.MVC layout VS MVC pagina master

Vorrei capire le differenze pratiche tra i due.

Per ora, mi rendo conto che se creo una vista utilizzando una pagina master, posso ignorare parecchie sezioni. Ad esempio, se il mio Maestro definisce una "colonna di sinistra" segnaposto ed un segnaposto "corpo" Posso non solo definire il corpo per una specifica vista, ma posso anche rendere contenuti nella sezione "colonna di sinistra", per esempio per visualizzare i controlli che sono legati al contesto in cui si trova la pagina (da una casella di ricerca a un visualizzatore quote). Inoltre, pagine master non può essere definito facendo uso di modelli di rasoio, che sono molto meno dettagliato rispetto ad altre sintassi (in parte sbagliata: someone è riuscito a incidere questo aspetto).

con il rasoio layout, posso definire solo un blocco contiguo della pagina che può essere sovrascritto dalle specifiche View, e devo usare più layout (rottura DRY) per i piccoli cambiamenti in altre parti della pagina. La mia precedente affermazione è corretta o mi manca qualcosa?

Ovviamente posso rendere contenuti in qualsiasi parte della pagina, facendo buon uso di jQuery, ma questo è un altro discorso

+1

in un layout del rasoio è possibile definie più 'sections'.Dovresti leggere questo articolo su come [layout e sezioni] (http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor .aspx) funziona in Razor. – nemesv

risposta

26

Si potrebbe utilizzare le sezioni con il rasoio. Scott Gu bloggato su di loro qui: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

nel layout si potrebbe definire tutte le sezioni come desiderate:

<div id="leftMenu"> 
    @RenderSection("LeftMenu", required: false) 
</div> 

che si poteva ignorare nei vostri punti di vista:

@section LeftMenu { 
    <div>... here comes the left menu for this view ...</div> 
} 

Si potrebbe anche verificare se una sezione è stata definita in una vista e se non fornire alcuni contenuti predefiniti:

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu") 
} 
else { 
    <div>Some default left menu</div> 
} 
11

A partire da MVC3, è stato introdotto il motore di visualizzazione del rasoio. Ad un livello elevato, un motore di visualizzazione è fondamentalmente ciò che prende la vista e rende l'HTML necessario. Razor usa il file _layout e il suo sistema di template è simile alle pagine master. Tuttavia, MVC3 e 4 hanno un altro motore di visualizzazione chiamato motore di visualizzazione WebForms e che utilizza le pagine master. Se cerchi le vecchie esercitazioni MVC1 e MVC2 vedrai le pagine master, perché prima di MVC3 c'era solo il motore di visualizzazione WebForms.

Ora, in termini di funzionalità, entrambi sono simili. Le pagine mastro consentono di definire i segnaposto di contenuto, mentre il rasoio consente di definire le sezioni. L'unica differenza principale sarebbe nel modo in cui viene resa la pagina. Le pagine master visualizzano la pagina all'esterno, ovvero prima la pagina principale, quindi i proprietari dei contenuti. Rasoio credo sia ricorsivo e inizia con la sezione più interna e funziona in modo molto diverso.

Partenza questo post del blog per ulteriori informazioni sui layout di rasoio http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

In termini di cui uno è preferito, esistono entrambi i motori di vista, ma se si vuole ulitize lo sytax rasoio (che consiglio vivamente) allora devi usare il sistema di layout. Il rasoio non ti consente di usare le pagine master.

+2

Grazie per la risposta dettagliata. – RayLoveless