{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
18/10/2010
Na primeira parte deste post vimos como o Razor trabalha o conceito de MasterPages/Layout Pages, e o RenderBody, que é o método padrão para renderização do conteúdo customizado.Agora veremos como criar nossas proprias sections ou áreas dentro da nossas MasterPage utilizando o Razor.
No post anterior nossa MasterPage tinha o seguinte conteúdo:
<html>
<head>
<title>@View.Title</title>
</head>
<body>
<div>@RenderBody()</div>
</body>
</html>O único lugar que poderia variar e ter um código específico era no local da chamada @RenderBody. Agora criaremos nosas sections, vejamos um exemplo:
<html>
<head>
<title>@View.Title</title>
</head>
<body>
<div>@RenderSection("Superior")</div>
<div>@RenderBody()</div>
@RenderSection("Gadget")
</body>
</html>Com isto estamos dizendo que nossas páginas possuirão um section chamada “Superior”, que podemos imaginar como sendo uma área para menu, banners, algo do tipo. E também uma section chamada “Gadget” onde podemos definir um gadget qualquer no site.
Agora basta que em nossa View criemos as duas sections, como mostra o exemplo abaixo:
@model dynamic
@{
View.Title = "Index";
Layout = "~/Views/Shared/_LayoutPage1.cshtml";
}
@section Superior {
Esta é a section superior
}
## Olá @Model.Nome
@section Gadget {
<div style="width:200px; border:2px solid #ffcc00;">
Este é um gadget qualquer
</div>
}Reparem que fazemos isso utilizando a sintaxe do Razor: @section NomeSection { conteúdo }.É uma maneira bastante simples de trabalhar com as sections.Você deve estar se perguntando: “Ah ok. Bacana, mas eu sou obrigado a criar TODAS as sections?”.
A resposta para a pergunta acima é: não! Você pode trabalhar com sections opcionais. Ou seja, a definição da sections nas views passa a ser opcional.Voltando ao nosso exemplo, a section Gadget é candidata a ser uma section opcional, vamos então alterar nossa MasterPage Razor:
@RenderSection("Gadget", required:false)Desta forma estamos sinalizando que a presença desta section não é obrigatória, ela pode ou não ser definida.(observação: no Preview 1 do MVC 3 o parâmetro era optional:true).Assim podemos definir a mesma apenas nas views que quisermos. Caso não coloquemos o required:false e deixemos de definir a section teremos um erro em runtime.
A definição das sections dentro de uma MasterPage no Razor é algo bastante simples, e implementar estas sections é algo trivial também.Com isso vimos mais uma vez o poder e a versatilidade da sintaxe Razor: o código fica simples e legível. Não há ruído.Em um próximo post veremos como definir MasterPages de forma automatizada para todas as views de um diretório utilizando o Razor.
Abraços, Vinicius Quaiato.