in ASP.NET

MVC3 e Razor: Section [como sobrescrever um bloco definido na layout]

Hoje durante o trabalho tive uma dúvida da maneira de implementar uma forma de criar um bloco no arquivo Layout, ou na MasterPage (WebForms) que fosse sobrescrito por uma seção que esteja definido na view.

De uma maneira ilustrativa, eu precisava definir um rodapé no arquivo Layout que será utilizado em varias partes do site, entretanto, caso eu precise, irei sobrescrever esse rodapé na View.

ASP.NET WebForms

Usando ASP.NET WebForms eu implementaria usando ContentPlaceHolder na MasterPage:

<div class="footer">
    <asp:ContentPlaceHolder runat="server" ID="cphFooter">
        <p>
            Rodapé Default</p>
    </asp:ContentPlaceHolder>
</div>

E caso eu precise sobrescrever esse rodapé na página eu uso um Content, definindo como ContentPlaceHolderID o id do ContentPlaceHolder da MasterPage

<asp:Content ID="FooterContent" runat="server" ContentPlaceHolderID="cphFooter">
    <p>
        Rodapé customizado</p>
</asp:Content>

 

ASP.NET MVC3 + Razor

Para implementar esse comportamento usando Razor em meu projeto, eu precisei utilizar um método chamado IsSectionDefined que fica na namespace System.Web.WebPages.

Minha implementação ficou da seguinte forma:

No arquivo  _Layout.cshtml

<div id="footer">
    @if (IsSectionDefined("RodapeCustom"))
    {
        @RenderSection("RodapeCustom")
    }
    else
    {
        <p>Rodapé Default</p>
    }
</div>

 

Agora, na View que eu precisar customizar o rodapé, só será necessário criar uma Section com o nome RodapeCustom

Na Index.cshtml

@section RodapeCustom{
    <p>Rodapé custom</p>
}

Abaixo seguem os dois projetos para download

ExemploRazor

WebForms

Espero que esta dica seja útil

abs

Rodolfo

  • Hugo_and_campos

    isso eh bacana amigo eu utilizei isso em um dos projetos da empresa onde trabalho. Parabens