Alteração dinâmica de MasterPages

por Fernando D'Angelo 8. abril 2010 08:53

Seguindo no assunto HTTP MODULES, aqui vai uma dica muito importante.

Em um projeto que já estava no ar tivemos a necessidade de personalizar as páginas do site. Essa personalização seria efetuada exclusivamente nos itens de suporte do site (topo, rodapé, menu, breadcrumbs, ...). Todos esses itens se encontravam em uma MasterPage que estava aplicada ao site inteiro. 

A idéia que apareceu então foi de fazer uma nova MasterPage personalizada e alterá-la dinamicamente. Para isso, seria necessário acessar o método Page_PreInit das páginas ASPX afetadas e inserir um código que fizesse essa alteração dinamicamente. No entanto, o site conta com algumas centenas de páginas e não queríamos ter o trabalho de alterar todas as páginas do site e subir todo o site novamente para o ar, o que nos obrigaria a testá-lo novamente.

O que foi feito então? Utilizamos um HTTP MODULE que acopla um método novo ao evento Page_PreInit das páginas. O roteiro seguido foi bem parecido com o utilizado no exemplo do POST Autenticando Usuários com HTTP MODULE . Portanto, não vou reescrever os passos para criar o HTTP MODULE. Acessem este POST e terão todo o passo a passo. 

Abaixo, segue o código da classe MasterPageModule .cs , que é a base do HTTP MODULE:

 

------------------------------------------------------------------------

 

using System;

using System.Web;

using System.Web.UI;

 

public class MasterPageModule : IHttpModule

{   

    public void Init(HttpApplication context)

    {

        context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);

    }

 

    void context_PreRequestHandlerExecute(object sender, EventArgs e)

    {

        Page page = HttpContext.Current.CurrentHandler as Page;

        if (page != null)

        {

             //o codigo abaixo adiciona o método page_alterarMasterPage ao evento PreInit da Página
             //com isso, esse método será executado juntamente com o método Page_PreInit de todas as Páginas

             page.PreInit += new EventHandler(page_alterarMasterPage);

        }

    }

 

    void page_alterarMasterPage(object sender, EventArgs e)

    {
        //o código abaixo alterar a MasterPage da página ASPX para masterPagePersonalizada.master

        Page page = sender as Page;

        page.MasterPageFile = "masterPagePersonalizada.master";

    }

 

    public void Dispose()

    {

    }

}

------------------------------------------------------------------------------------------------

 

 

Abraços e até a próxima

Fernando D'Angelo

 

 

Tags:

API | Programação




Comentários

Comentar




  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading




Calendário

<<  fevereiro 2012  >>
seteququsedo
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

Ver os posts em um calendário maior

Oportunidades


Para divulgar oportunidades aqui, entre em contato conosco enviando a descrição completa da vaga + uma data de validade para cada uma delas.

* As vagas divulgadas neste espaço são de inteira responsabilidade das empresas anunciantes.

Assine Nossa Newsletter

Quero ser notificado quando um novo Post for publicado