Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 15 de enero de 2019
ASP.NET Core Como sabemos, los archivos Razor _ViewImports.cshtml y _ViewStart.cshtml se emplean para introducir directivas y código de inicialización para todas las vistas o páginas que se encuentren por debajo en la estructura de carpetas del proyecto.

Es decir, si el archivo _ViewImports.cshtml se encuentra en la carpeta /Views, todas las vistas que hay por debajo heredarán las directivas que hayamos especificado en su interior, de la misma forma que /Pages/_ViewImports.cshtml afectara a las páginas presentes en la carpeta /Pages y descendientes.

Pues bien, hace unos días, un alumno del curso de ASP.NET Core en CampusMVP (que, por cierto, ha sido recientemente actualizado a la versión 2.2 del framework) planteaba una duda sobre un escenario algo más complejo. Si una aplicación tenía vistas en la carpeta /Views, también tenía vistas en áreas (carpeta /Areas), e incluso pudiera tener algunas páginas Razor en /Pages, la pregunta era si existía algún mecanismo para hacer que todas las vistas o páginas definidas en dichas carpetas compartieran directivas (como using o importaciones de tag helpers) sin tener que duplicar este código en sus respectivos _ViewImports.cshtml para cada una de ellas.

A priori pensé que quizás el planteamiento sería retocar ligeramente el motor de vistas, pero, tras estudiarlo un rato, vi que el tema era mucho más sencillo :)

Y es que, aunque no es algo muy intuitivo, resulta que los archivos _ViewImports.cshtml y _ViewStart.cshtml son procesados comenzando por el directorio raíz del proyecto, y no desde carpetas específicas para vistas, como podría suponerse.  Es decir, si se fuera a compilar una vista en /Areas/Dashboard/Views/Home/Index.cshtml, el framework incluirá en ella, sucesivamente, las directivas que encuentre en:
  • /_ViewImports.cshtml (la carpeta raíz del proyecto)
  • /Areas/_ViewImports.cshtml
  • /Areas/Dashboard/_ViewImports.cshtml
  • /Areas/Dashboard/Views/_ViewImports.cshtml
  • /Areas/Dashboard/Views/Home/_ViewImports.cshtml
Y lo mismo ocurre con el archivo _ViewStart.cshtml.

Por tanto, para introducir directivas o código de inicialización Razor de forma global para toda la aplicación, bastará con establecerlas en el raíz del proyecto.

En fin, son esos pequeños detalles que pueden venir bien en algunas ocasiones y es interesante conocer :)

Publicado en Variable not found.

Aún no hay comentarios, ¡sé el primero!