A primeira lição explica sobre o uso de Master Pages, que a primeiro momento é bem simples, mas a parte explicando sobre as propriedades é interessante e com certeza usuários com pouca experiência não devem saber como usar este recurso. Vamos la!!
De inicio para que serve a Master Page? Pra quem ja programo em plataforma windows ou pelo menos ouviu algo, sabe que é possível ter um formulário base, e que todos outros criados herdam este formulário. Normalmente este formulário base possui o menu, uma toolbar e etc. A Master Page segue a mesma idéia para projetos web. Cria-se um layout padrão, onde o mais comum é ter o menu, a logo da empresa e um rodapé, e todas as páginas que usarem esta Master Page, terão este mesmo layout.
A principal idéia é:
- centralizar funcionalidades comuns;
- quando necessário alterar algo, será necessário alterar em um único local;
- desenvolver controles que serão aplicados facilmente em todas as páginas, como um menu;
- e ainda sim, permitir que as páginas que "herdam" esta Master Page possam customizar conforme necessário.
Como fica o resultado para o usuário? O usuário irá acessar a url do formulário normalmente, e quando esta página for renderizada para o usuário será lida a diretiva MasterPageFile que especifica qual a Master Page que a página esta usando, então o conteúdo que estiver na página dentro do controle Content será renderizado junto com a Master Page como uma única página simples para o usuário.
Toda Master Page deve ter o controle ContentPlaceHolder é no "espaço" deste controle no código html que o código das página serão "injetados". Exemplo: irei colocar um ContentPlaceHolder dentro do head e do Body da minha Master Page:
<head runat="server">
<title>Site do quintelab</title>
<asp:ContentPlaceHolder ID="HeadContent" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form runat="server">
<div class="title">
<h1>
Quintelab
</h1>
</div>
<div class="principal">
<asp:ContentPlaceHolder ID="MainContent" runat="server"/>
</div>
<div class="footer">
</div>
</form>
</body>
Repare os dois objetos ContentPlaceHolderé no local deles que o código das demais páginas serão renderizados. Exemplo de uma página que fez referência a esta Master Page:
<%@ Page Language="c#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Teste.aspx.cs" Inherits="Teste" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
Aqui meu conteúdo especifico
</asp:Content>
Tudo que estiver dentro dos Content serão renderizados no local dos ContentPlaceHolder.
Vamos aos recursos!! É possível definir no web.config da aplicação ou de uma pasta qual é a Master Page principal, basta:
<pages masterPageFile="MinhaMasterPage.Master" />
Claro será necessário criar nas paginas os controles Contents correspondentes a Master.Page, caso contrário nada irá acontecer.
A parte mais interessante desta lição é como utilizar e customizar Propriedades, Métodos e Controles da Master Page pelas páginas. Um exemplo, um título, você pode colocar uma label em sua Master Page e acessar seu conteúdo através das páginas.
Para isso é necessário ter uma propriedade pública na Master Page, adicionar a declaração @ MasterType nas páginas aspx, e para acessar o valor da propriedade a sintaxe é Master.<NomePropriedade>.
Não tem muito segredo, exemplo:
1º Criando a propriedade pública na Master Page:
public String SharedInfo
{
get { return (String)Session["SharedInfo"]; }
set { Session["SharedInfo"] = value; }
}
2º Na página aspx:
<%@ Page Language="c#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>
<%@ MasterType VirtualPath="~/Site.master" %>
3º Acessar o valor da propriedade:
infoLabel.Text = Master.SharedInfo;
Outro recurso interessante, e com certeza irá usar, é o que a lição chama de Nested Master Pages. Que são Master Pages herdadas de outra Master Page. Por exemplo, você pode criar a Master Page Principal.Master onde nela possui a logo da empresa e um rodape. E criar mais duas Master Pages, uma chamada Consulta.Master que herda a Principal e tem particularidades de uma tela de consulta e a Cadastro.Master que também herda da Principal mas possui particularidades de uma tela de cadastro.
Por último e não menos importante, como trocar a Master Page dinamicamente. Mesmo que esta opção exista, você deve na sua página aspx definir na declaração qual é a Master Page que a página utiliza, e claro ambas as Master Page devem ter os mesmos ContentPlaceHolder e as mesmas propriedades.
Para fazer a troca dinamicamente, é necessário utilizar o evento Page_PreInit e definir a propriedade MasterPageFile. Exemplo:
void Page_PreInit(Object sender, EventArgs e)
{
MasterPageFile = "~/MinhaMasterDinamica.master";
}
E desta forma se encerra a 1º Lição do Capítulo 2. Muito útil com certeza.
Abraços!!