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:
Postar um comentário