Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

ASP.NET MVC 3 - Razor templates


Continuando a falar sobre o Razor, a nova View Engine para o ASP.NET MVC, vou mostrar um pouco como podemos trabalhar com templates para nossas views. Desde o ASP.NET 2.0 podemos fazer isso com a utilização de Master Pages, e é aí que entram as Layout Pages do Razor, atuando como MasterPages.

Criando uma Layout Page para o Razor

Podemos criar uma Layout Page utilizando o menu de contexto. Clique sobre a pasta Shared por exemplo: Add New Item (ou Ctrl + shift + A):

Criando uma Master Page no Razor

Feito isso teremos um arquivo adicionado com o seguinte contéudo:

<html>
  <head>
    <title>@View.Title</title>
  </head>
  <body>
    <div>@RenderBody()</div>
  </body>
</html>

Esta é nossa MasterPage ou Layout Page no Razor. Tudo que fizermos aí será geral para todas as páginas que utilizam esta MasterPage/Layout Page.

O conteúdo das páginas será exibido no lugar do método RenderBody(). Ou seja, nossas páginas serão renderizadas aí dentro deste template.

Vou modificar esta página adicionando o seguinte código após o body:

<h1>Este é o conteúdo fixo em todas as Views que usam esse Layout</h1>

Criando uma view com Razor que utiliza a MasterPage

Vamos criar uma view normalmente e marcar que ela utiliza a nossa MasterPage:

Utilizando uma Master Page no Razor

Com isso nossa view criada terá o código abaixo:

1 @model dynamic
2 @{
3   View.Title = "Index";
4   Layout = "~/Views/Shared/_LayoutPage1.cshtml";
5 }
6 
7 <h2>Index</h2>

Reparem que na linha 4 está sendo setada a informação sobre qual LayoutPage/MasterPage utilizar.

Vou alterar nossa view adicionando o código semelhante ao do post do artigo anterior sobre Razor:

 1 @model dynamic
 2 @{
 3     View.Title = "Index";
 4     Layout = "~/Views/Shared/_LayoutPage1.cshtml";
 5 }
 6 
 7 <h2>Olá @Model.Nome</h2>
 8 <div>
 9 Você foi cadastrado em: @Model.DataQualquer.ToString("dd/MMM/yyyy")
10 
11 Sua sequência fibonacci é:
12 @foreach(var num in Model.ListaInteiros){<span>@num,</span>}
13 </div>

Desta forma quando executarmos nossa aplicação, nossa view será renderizada assim:

Aplicacao em execucao com MasterPages e Razor

E se eu criar uma view que apenas exibe "Olá" utilizando a MasterPage teremos o mesmo resultado:

Outra view em execucao com MasterPages e Razor

Conclusão

A criação de MasterPages no Razor é bastante simples e seu poder é bastante grande. Novamente ficamos com um código mais limpo, simples de manter e flexível.

Além do RenderBody podemos criar nossas próprias sessões, e veremos isso em um próximo post. Desta forma podemos ter MasterPages com sessões diferentes. Além disso veremos futuramente como setar master pages para todas as views de um diretório ou estrutura de diretórios, mais uma novidade do MVC 3.

É isso galera, fiquem ligados e até a próxima.

Vinicius Quaiato.

Voltar

Fork me on GitHub