Aquí está el About.cshtml de la plantilla MVC 3 predeterminada:
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
Put content here.
</p>
Esperaría que se encontrara una referencia al archivo _ViewStart en el About.cshtml
, pero claramente no lo es.
He buscado global.asax
y web.config
, pero no puedo descubrir cómo About.cshtml
se "vincula" el archivo con el diseño del archivo _ViewStart.
Todo funciona como se esperaba, me gustaría saber qué está pasando bajo el capó ...
ViewLocationFormats = ViewLocationFormats.Union(new string[] { "~/Inspinia/ExampleViews/{1}/{0}.cshtml" }).ToArray();
. Como resultado, tuve que agregar una copia de mi archivo _ViewStart.cshtml a "~ / Inspinia / ExampleViews", de lo contrario no se recogió y no se configuró ningún diseño._ViewStart
en cada subcarpeta que se vincule a las vistas en esa subcarpeta?En un sentido más general, esta capacidad del marco MVC para "saber" sobre _Viewstart.cshtml se llama "Codificación por convención".
Wikipedia
No hay magia en eso. Se acaba de escribir en la base de código central del marco MVC y, por lo tanto, es algo que MVC "sabe". Por eso no lo encuentras en los archivos .config ni en ningún otro lugar; en realidad está en el código MVC. Sin embargo, puede anular para alterar o anular estas convenciones.
fuente
Solo otro pensamiento.
Si desea tener su propio
cshtml
archivo como plantilla común, puede hacerlo de esta maneraDentro de tu
_viewstart.cshtml
puedes mencionar tucshtml
archivo común .fuente
El código fuente es un lugar mucho mejor para buscar esto que la documentación.
Haciendo referencia al código MVC 6 de Github, tenemos algunos archivos de interés.
----actualizar----
Debido a los cambios en la estructura de origen, la información sobre cómo se recopilan las páginas viewstart ahora se puede encontrar en RazorViewEngine.cs. Busque la función "GetViewStartPages".
----/actualizar----
Para responder cómo entran en juego, mira RazorView , que creo (debido a IView) está vinculado a la tubería de MVC. Este archivo tiene un método RenderAsync que se llama desde la canalización de MVC para representar la vista solicitada.
RenderAsync realiza llamadas a RenderPage Y LUEGO RenderLayout (TENGA EN CUENTA EL PEDIDO). El RenderPage primero realiza llamadas para tratar con archivos viewstart (nota plural, podría haber más de un archivo _viewstart).
Por lo tanto, la información que busca se puede obtener de la función RenderViewStartAsync en el archivo RazorView.cs en el espacio de nombres Microsoft.AspNet.Mvc.Razor.
fuente
Esto puede agregar información adicional a esta pregunta ahora (2016 ala MVC4, MVC5).
El motor Razor encuentra y ejecuta el código en _ViewStart.cshtml antes que cualquier otro código que esté en el mismo directorio o subdirectorio donde se encuentra _ViewStart.cshtml .
Cualquier vista puede anular la propiedad Diseño o cualquiera de sus valores.
Solo pensé que podría agregar un poco más de información para mostrarle por qué es _ViewStart.
Si obtiene ILSpy y examina el código en RazorViewEngine (System.Web.Mvc.dll) verá que el código hace referencia a ese nombre.
Puede ver que RazorViewEngine busca un archivo con ese nombre:
fuente
Si desea tener un diseño común para sus páginas, necesita definir el diseño común y asociar una vista con el diseño, tenemos que establecer la propiedad del diseño en todas y cada una de las vistas, esto viola el principio DRY (No repetir). Para esto, .Net Framework ha proporcionado el archivo "_ViewStart.cshtml", ubicado dentro de la carpeta de vista. Colocamos la información de diseño en el archivo "_ViewStart.cshtml" y cada vista utiliza de manera predeterminada esta información de diseño. Si desea proporcionar información de diseño diferente, supongamos que en su vista de Inicio, puede crear un nuevo "_ViewStart.cshtml" con referencia a ese diseño y colocarlo en la carpeta "Vista de Inicio".
fuente
La respuesta corta es : ViewStarts comienza primero cuando se visualiza cualquier vista. La larga historia está a continuación:
La historia de la creación de un archivo de vista única:
Espera que esto te haga consciente de lo que realmente está sucediendo dentro de los misterios desconocidos del ciclo de vida de tu programa.
fuente