2010-08-24 15 views
24

que desea especificar (en un lugar) una página de diseño por defecto en la maquinilla de afeitar, de modo que pueda eliminar este:¿Cómo se especifica LayoutPage por defecto en Razor en ASP.NET MVC 3 Preview 1?

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

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

+0

La segunda respuesta aquí debe marcarse como la respuesta aceptada para el beneficio del resto de la comunidad, por favor. – Brondahl

Respuesta

0

No hay una manera fácil de hacerlo 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. Desafortunadamente, 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 maneras que se me ocurre para que funcione (aunque tampoco es óptima)

  1. escribir su propia clase base que se deriva de la página WebViewPage y establece la Disposición derecha 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 anulación View(string viewName, string masterName)). 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.
+3

Para el beneficio del resto de la comunidad: tenga en cuenta que la segunda respuesta es ampliamente considerada como mejor. – Brondahl

2

Parece que la manera de hacerlo es usando un archivo _init.cshtml en la raíz del directorio de visualización en el que desea una página común elemento (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 mucha información más detallada sobre cómo hacer esto en el libro de instrucciones de Microsoft sobre cómo compilar páginas con Razor. Encontré la sección Ejecutando código antes y después de los archivos en una carpeta en la página 169. Consulte este Microsoft download page para obtener el libro completo, así como muestras adicionales de Razor.

+0

Sí, he oído hablar de eso. Y no funciona, no importa dónde coloque _init.cshtml ... ¿Cómo es posible? BTW Muchas gracias por el enlace, definitivamente me ayudará en el futuro. – Darmak

+0

Mirando el libro de nuevo, veo que dice poner _init.cshtml, _start.cshtml y _end.cshtml en el directorio raíz de su sitio web. Muy parecido al Global.asax sería. –

+1

'_init.cshtml' no funciona en MVC 3 Preview 1 por lo que no puede seguir ese patrón. Sin embargo, esto será compatible en futuras versiones. – marcind

68

Crear un "_ViewStart.cshtml ~/Vistas /" página y la siguiente en el interior:

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

Tenga en cuenta que puede escribir código aquí, por lo que es posible cambiar el diseño basado en la tipo de dispositivo específico, etc.

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

Source

+0

También encontré esta publicación útil que ilustra la orientación de diferentes dispositivos con este enfoque: http://www.michaelfcollins3.me/2011/01/changing-your-razor-view-layout-for-themes-and-devices/ – miguelv

+1

This should ser la respuesta aceptada. También funciona en MVC 4. – JConstantine

+1

No estoy seguro de lo que sucedió, pero por alguna razón mi navegador decidió dar una respuesta negativa a esta respuesta. Mientras que nada está mal con eso. No me di cuenta de esto hasta ahora, así que ya no puedo cambiarlo, ¡disculpas! –