rendersection mvc cshtml razor asp.net-mvc-4 master-pages

razor - mvc - render partial view



MVC Layout VS MVC Master Page (2)

Estoy empezando a aprender MVC4. Me encontré con las dos posibilidades de crear una Vista basada en una plantilla Razor o una Página maestra.

Me gustaría entender las diferencias prácticas entre los dos .

Por ahora, puedo ver que si creo una vista usando una página maestra, puedo anular varias secciones. Por ejemplo, si mi Maestro define un marcador de posición de "columna izquierda" y un marcador de posición de "cuerpo", no solo puedo definir el cuerpo para una Vista específica, sino que también puedo mostrar contenido en la sección de "columna izquierda", por ejemplo, para mostrar los controles que están vinculados al contexto en el que se encuentra la página (desde un cuadro de búsqueda hasta un visor de cotización de acciones). Además, las páginas maestras no se pueden definir haciendo uso de plantillas de Razor, que son mucho menos detalladas que otras sintaxis (parcialmente incorrecto: someone logró hackear este aspecto).

Con Razor Layouts, solo puedo definir un bloque contiguo de la página que puede ser anulado por una Vista específica, y debo usar varios diseños (ruptura en SECO) para pequeños cambios en otras partes de la página. ¿Mi declaración anterior es correcta o me falta algo?

Obviamente, puedo representar contenidos en cualquier parte de la página haciendo un buen uso de jQuery, pero eso es otro asunto.


A partir de MVC3, se introdujo el motor de vista de la maquinilla de afeitar. En un nivel alto, un motor de vista es básicamente lo que toma la vista y presenta el HTML necesario. Razor usa el archivo _layout.cshtml y su propio sistema de plantillas que es similar a las páginas maestras. Sin embargo, MVC3 y 4 tienen otro motor de vista llamado WebForms View Engine y esto usa páginas maestras. Si observa los tutoriales de MVC1 y MVC2 respectivamente, verá las páginas maestras. Antes de MVC3 solo existía WebForms View Engine.

Ahora en términos de funcionalidad, ambos son similares. Las páginas maestras le permiten definir los marcadores de posición de contenido, mientras que Razor le permite definir secciones. La única diferencia importante entre los dos sería en cómo se representa la página. Las páginas maestras representan la página afuera, es decir, primero la página maestra, luego los titulares de contenido. Razor es, creo, recursiva y comienza con las secciones más internas y funciona de manera que está fuera de lugar.

Consulte esta publicación del blog para obtener más información sobre diseños de maquinillas de afeitar: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor. aspx

En términos de cuál se prefiere, existen ambos motores de vista; pero si desea utilizar la sintaxis de la maquinilla de afeitar, que recomiendo encarecidamente, debe utilizar el sistema de diseño. Razor no te permite usar páginas maestras.


Podrías usar secciones con Razor. Scott Gu publicó un blog sobre ellos aquí: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

En su Diseño puede definir tantas secciones como desee:

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

que usted podría anular en sus puntos de vista:

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

También puede probar si una sección se ha definido en una vista y, de no ser así, proporcionar algún contenido predeterminado:

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