tag net mvc for asp asp.net-mvc-3 razor

for - ¿Cómo se especifica LayoutPage por defecto en Razor en ASP.NET MVC 3 Preview 1?



select asp-for asp-items (3)

Deseo especificar (en un lugar) una página de diseño predeterminada en Razor, para que pueda eliminar esto:

@{ LayoutPage = "~/Views/Shared/_Layout.cshtml"; }

de cada archivo .cshtml que tengo. Pero no sé cómo ... ¿Alguna idea? Estoy usando el motor Razor de ASP.NET MVC 3 Preview 1.


Crea una página "~ / Views / _ViewStart.cshtml" y la siguiente dentro:

@{ Layout = "~/Views/Shared/_Layout.cshtml"; }

Tenga en cuenta que puede escribir código aquí, por lo que es posible cambiar su diseño en función del tipo de dispositivo al que se apunta, etc.

Esto ahora se crea de forma predeterminada en un proyecto MVC3 vacío.

Source


No hay una manera fácil de hacer esto en MVC 3 Preview 1. Esta es una limitación de los bits de vista previa que se abordarán en las próximas versiones. Lamentablemente, los archivos _init.cshtml no funcionan en esta vista previa de MVC3, por lo que no puede seguir el patrón de páginas web.

Hay 2 formas en que puedo pensar para que funcione (aunque ninguna es óptima)

  1. escriba su propia clase base de página que se deriva de WebViewPage y establece el diseño correcto en el constructor ... pero en ese caso, debería especificar una directiva @inherits en cada vista.
  2. establezca la anulación de diseño en su método de acción (utilizando la View(string viewName, string masterName) anular). Puede escribir una clase base de controlador intermedio que tenga un método de ayuda para evitar la molestia de repetir el diseño en cualquier lugar.

Parece que la forma de hacerlo es utilizando un archivo _init.cshtml en la raíz del directorio de vista en el que desea un elemento de página común (encabezado). Cuando el motor de vista Razor construye su página, busca algunos archivos específicos llamados automáticamente _start.cshtml, _init.cshtml y _end.cshtml; estos archivos son cargados en el orden respectivo por el motor de vista para cada solicitud. Colocar la definición de LayoutPage y / u otras operaciones de inicialización comunes en estos archivos asegurará que se ejecuten para todas las páginas.

Nota: no estoy seguro de si el efecto se transmite a los subdirectorios, ya que no estaba claro en la documentación; tendrás que probarlo y descubrirlo.

Hay información un poco más detallada sobre cómo hacer esto que se encuentra en el libro de instrucciones de Microsoft sobre cómo compilar páginas con Razor. Encontré la sección Ejecución de código antes y después de los archivos en una carpeta en la página 169. Consulte esta página de descarga de Microsoft para obtener el libro completo, así como muestras adicionales de Razor.