2010-11-02 15 views
151

Estoy usando _viewstart.cshtml to automagically assign the same Razor Layout a mis vistas.¿Manera correcta de usar _viewstart.cshtml y vistas parciales de Razor?

Es un simple archivo muertos en la raíz de mi carpeta de vistas que tiene este aspecto:

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

Esto es más seco que la adición de la directiva @Layout a cada vista individual.

Sin embargo, esto plantea un problema para la maquinilla de afeitar parciales puntos de vista, porque corren el contenido de _viewstart.cshtml y por lo tanto de forma incorrecta asignan a sí mismos un diseño, lo que les convierte, um, ya no parcial.

Aquí hay un proyecto hipotético que muestra el archivo _viewstart.cshtml, el archivo _layout.shtml compartido y una vista parcial ("AnonBar.cshtml").

Example project structure

En la actualidad, la forma en que estoy recibiendo alrededor de esto es añadiendo la siguiente línea a cada vista parcial:

@{ 
    Layout = ""; 
} 

Este parece ser el camino equivocado para denotar una vista como una parcial en Razor. (Tenga en cuenta que a diferencia de las formas de la tela ver motor, la extensión del archivo es el mismo para las vistas parciales.)

Otras opciones he considerado, pero que son aún peores:

  • Poner todas las vistas parciales en una carpeta común, para que puedan compartir un _viewstart.cshtml común. Esto rompe la convención de que las vistas están en la misma carpeta que su controlador.
  • No se usan vistas parciales.

¿Esto es algo que todavía está siendo desarrollado por el equipo Razor view engine, o me está faltando un concepto fundamental?

+3

Disculpa, pero ¿qué son esos iconos junto a los nombres de archivo? :) ¿Algún tipo de control de fuente correcto? – Alex

+6

@jitbit: VisualSVN – erict

Respuesta

232

Si return PartialView() de sus controladores (en lugar de return View()), entonces _viewstart.cshtml no se ejecutará.

+6

Aha, no sabía nada de la clase 'PartialViewResult'. Eso era lo que necesitaba. – Portman

+6

Como seguimiento, he descubierto que necesito ** también ** establecer explícitamente el tipo de devolución del método de acción en 'PartialViewResult' en lugar del' ActionResult' habitual. – Portman

+2

@Portman ¿Ves problemas cuando el tipo de devolución del método de acción no es 'ActionResult'? Me sorprende que esto sea un problema porque el tiempo de ejecución de MVC no debería comportarse de manera diferente en este caso (es decir, siempre que el tipo devuelto por el método de acción sea 'ActionResult' o cualquier clase derivada de él, las cosas deberían funcionar). – marcind

Cuestiones relacionadas