Razor Nested Layouts

Tags: asp.net, mvc 3, razor, layout

Na View Engine padrão do ASP.Net temos a opção de utilizar as Nested Master Pages, na View Engine Razor também podemos fazer algo semelhante, porém não a essa opção visível (Nested Layout).

A solução é bem simples:

  1. Criar o arquivo de Layout “pai”.
    Layout
    É um arquivo de layout comum do Razor, pode ter @sections e tudo mais.
  2. Criar o arquivo de Layout filho:
    LayoutSite
    Esse Layout filho que tem o detalhe fazer a referência ao pai:
    @{
    Layout = "~/Shared/_Layout.cshtml";
    }
    <div id="menu">...
     
    Note que o Layout filho também possui um @RenderBody() que é onde a View vai ser renderizada.
  3. Crie sua View normalmente, referenciando o Layout filho.
    View
  4. Você pode continuar tendo Views que referenciam o Layout pai.
    ViewPai
  5. Você pode ter quantos filhos quiser (cuidado!).
  6. Você pode colocar um Layout filho como padrão para todas as Views no _ViewStart.cshtml (ou usar o pai).
    ViewStart
  7. Cuidado com as @sections !

 

Por que eu usei isso:

  • Meu Layout pai possui somente referências a JavaScripts e CSSs, e o rodape. Apenas uma View herda dele diretamente: LogOn.
  • Após tenho diversos “subsites”, cada um com seu Layout próprio.

Não é uma boa solução carregar sempre todo o JS e o CSS, mas como é uma aplicação de Intranet não fez muita diferença e me poupou trabalho.

Add a Comment