quinta-feira, 1 de outubro de 2009

Acessando propriedades da MasterPage

Sei, não é nenhuma mágica acessar dados da MasterPage através de um WebContentForm (página de dentro da MasterPage) e todo mundo já deve ter feito.
protected void Page_Load(object s, EventArgs e)
{
    this.Master.SkinID = "GreenSkin";
}
Mas nem tudo é tão simples. Lembrando que a propriedade Master da classe Page é apenas outra Page logo damos de cara com a necessidade de um Cast em caso de criarmos algo mais personalizado. Imaginando agora que o nome da classe da minha MasterPage é "Site" e tem uma propriedade TituloMenu que preciso acessar na minha página de conteúdo. Pra isso geralmente fazemos o seguinte:
protected void Page_Load(object s, EventArgs e)
{
    ((Site)this.Master).TituloMenu= "Home";
}
Muito bem, assim o Cast nos ajuda a acessar nossa classe de MasterPage e assim podemos acessar nossa propriedade em nossa classe derivada. Agora que vem o pulo do gato. E se não precisássemos fazer o cast? É simples, basta informar logo abaixo da diretiva @Page da página aspx qual o tipo da nossa MasterPage:
<%@ MasterType TypeName="MasterPageSample.Site" %>
Com isso nossa página passa a reconhecer a propriedade Master como sendo do tipo da nossa MasterPage, no caso Site.
protected void Page_Load(object s, EventArgs e)
{
    this.Master.TituloMenu= "Home";
}
Se clicarmos em cima da propriedade Master vamos ver o que acontece por tráz disso tudo. Quando criamos a diretiva MasterType o Visual Studio cria no arquivos auxiliar designer.cs da página uma propriedade com o mesmo nome (Master) porém escondendo a propriedade da classe base:
public new Site Master
{    
get    {return ((Site)(base.Master));}
}
Sei que não é a coisa mais impressionante do mundo mas achei interessante essa "tipagem" que o Visual Studio faz pra nós. Lembrei de publicar isto porque ví no livro de certificação e ainda hoje acabei usando em um projeto. Enjoy

Nenhum comentário: