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

0 comentários: