Aqui está o About.cshtml do modelo padrão do MVC 3:
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
Put content here.
</p>
Eu esperaria que uma referência ao arquivo _ViewStart fosse encontrada no About.cshtml
, mas claramente não é.
Eu olhei em global.asax
e web.config
, mas eu não consigo descobrir como o About.cshtml
arquivo é "ligado" com o layout do arquivo _ViewStart.
Tudo funciona como esperado, eu gostaria de saber o que está acontecendo sob o capô ...
ViewLocationFormats = ViewLocationFormats.Union(new string[] { "~/Inspinia/ExampleViews/{1}/{0}.cshtml" }).ToArray();
. Como resultado, tive que adicionar uma cópia do meu arquivo _ViewStart.cshtml a "~ / Inspinia / ExampleViews", caso contrário, ele não foi escolhido e nenhum layout foi definido._ViewStart
em cada subpasta que se vinculará às exibições nessa subpasta?Em um sentido mais geral, essa capacidade da estrutura MVC de "conhecer" sobre _Viewstart.cshtml é chamada de "Codificação por convenção".
Wikipedia
Não há mágica nisso. Ele acabou de ser gravado na base de código principal da estrutura MVC e, portanto, é algo que o MVC "conhece". É por isso que você não o encontra nos arquivos .config ou em outro local; na verdade, está no código MVC. No entanto, você pode substituir para alterar ou anular essas convenções.
fonte
Apenas outro pensamento.
Se você deseja ter seu próprio
cshtml
arquivo como um modelo comum, pode fazê-lo desta maneiraDentro do seu,
_viewstart.cshtml
você pode mencionar seucshtml
arquivo comum .fonte
O código-fonte é um lugar muito melhor para procurar isso do que a documentação.
Fazendo referência ao código MVC 6 do Github, temos alguns arquivos de interesse
----atualizar----
Devido a alterações na estrutura de origem, as informações sobre como as páginas do viewstart são reunidas agora podem ser encontradas no RazorViewEngine.cs, procurando a função "GetViewStartPages".
----/atualizar----
Para responder como eles entram em cena, veja o RazorView , que eu acredito (por causa do IView) está ligado ao pipeline do MVC. Este arquivo possui um método RenderAsync que é chamado do pipeline MVC para renderizar a exibição solicitada.
RenderAsync faz chamadas para RenderPage E ENTÃO RenderLayout (NOTE THE ORDER). O RenderPage primeiro faz chamadas para lidar com arquivos de viewstart (observe o plural, pode haver mais de um arquivo _viewstart).
Portanto, as informações que você procura podem ser obtidas na função RenderViewStartAsync no arquivo RazorView.cs no espaço de nome Microsoft.AspNet.Mvc.Razor.
fonte
Isso pode adicionar algumas informações adicionais a esta pergunta agora (2016 ala MVC4, MVC5).
O mecanismo Razor localiza e executa o código em _ViewStart.cshtml antes de qualquer outro código que esteja no mesmo diretório ou subdiretório em que o _ViewStart.cshtml é encontrado.
Qualquer visualização pode substituir a propriedade Layout ou qualquer um de seus valores.
Apenas pensei em adicionar um pouco mais de informação para mostrar por que é _ViewStart.
Se você obtiver o ILSpy e examinar o código no RazorViewEngine (System.Web.Mvc.dll), verá que o próprio código faz referência a esse nome.
Você pode ver que o RazorViewEngine procura um arquivo com esse nome:
fonte
Se você deseja ter um layout comum para suas páginas, precisa definir o layout comum e associar uma visualização ao layout. Temos que definir as propriedades de layout em cada visualização, isso viola o princípio DRY (Não se repita). Para isso, o .Net Framework fornece o arquivo "_ViewStart.cshtml", colocado dentro da pasta de exibição. Colocamos informações de layout no arquivo "_ViewStart.cshtml" e, por padrão, todas as visualizações usam essas informações de layout. Se você deseja fornecer algumas informações diferentes sobre o layout, suponha que a visualização da tela inicial, crie um novo "_ViewStart.cshtml" com referência a esse layout e coloque-o na pasta "Home View".
fonte
A resposta curta é : o ViewStarts inicia primeiro quando qualquer exibição está sendo renderizada. A longa história está abaixo:
A história da criação de um único arquivo de visualização:
Espera que isso o torne ciente do que realmente está acontecendo dentro dos mistérios desconhecidos do ciclo de vida do seu programa.
fonte