Estoy usando _viewstart.cshtml para asignar automáticamente el mismo diseño Razor a mis vistas.
Es un archivo simple muerto en la raíz de mi carpeta Vistas que se ve así:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Esto es más SECO que agregar la directiva @Layout a cada vista.
Sin embargo, esto plantea un problema para las vistas parciales de Razor , porque ejecutan el contenido de _viewstart.cshtml y, por lo tanto, se asignan incorrectamente un diseño, lo que hace que, um, ya no sean parciales.
Aquí hay un proyecto hipotético, que muestra el archivo _viewstart.cshtml, el archivo compartido _layout.shtml y una vista parcial ("AnonBar.cshtml").
Actualmente, la forma en que estoy evitando esto es agregando la siguiente línea a cada vista parcial:
@{
Layout = "";
}
Esta parece ser la forma incorrecta de denotar una vista como parcial en Razor. (Tenga en cuenta que, a diferencia del motor de vista de formularios web, la extensión del archivo es la misma para vistas parciales).
Otras opciones que consideré 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 usar vistas parciales.
¿Es esto algo que el equipo del motor de visualización Razor todavía está desarrollando o me falta un concepto fundamental?
fuente
Respuestas:
Si usted
return PartialView()
desde sus controladores (en lugar dereturn View()
),_viewstart.cshtml
no se ejecutará.fuente
PartialViewResult
clase. Eso era lo que necesitaba.PartialViewResult
en lugar de la habitualActionResult
.ActionResult
? Me sorprende que esto sea un problema porque el tiempo de ejecución MVC no debería comportarse de manera diferente en este caso (es decir, siempre y cuando el tipo devuelto por el método de acción seaActionResult
o cualquier clase derivada de él, las cosas deberían funcionar).ActionResult
. Funciona bien si el tipo de retorno esPartialViewResult
. ¿Crees que necesito presentar un error de conexión?