As Master Pages do ASP.NET permitem você criar um layout consistente de páginas em sua aplicação. Você cria uma única master page que define o layout e
comportamento básico de todas as páginas ou de um grupo de páginas de sua aplicação. Você pode então, criar páginas individuais para exibir o conteúdo que você quiser. A master page pode conter texto estático, elementos HTML, e controles ASP.NET. Possuem a extensão .master, e são identificadas pela diretiva Page=”Master” em seu cabeçalho.
Você pode colocar o conteúdo comum a todo o site em uma master page, um cabeçalho comum que apareça em múltiplas páginas, por exemplo.
Você pode ter mais de uma master page em seu site para definir layouts diferentes em seções diferentes.
Características da Master Page
Possue a extensão .master e tem o valor Master na diretiva Page.
<%@ Master Language="C#" AutoEventWireup="true"
CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
Por default, o servidor IIS impede que arquivos com a extensão .master sejam vistos em um navegador web. Isso impede o usuário de ver a master page com uma página ASP.NET stand alone.
Uma master page é quase igual a um Web Form, pois pode conter qualquer tipo de controle ASP.NET, incluindo elementos HTML de alto nível como HTML, head, body e form. Você pode usar tabelas, formatar a disposição dos elementos com divs, ter imagens, etc. O que diferencia uma master page de um Web Form normal, é que ela tem presente um ou mais controles ContentPlaceHolder.
ContentPlaceHolder, é o controle que define as área onde o conteúdo dinâmico será incluído. Você deve colocar os controles ContentPlaceHoder dentro dos elementos head, ou dentro de um form como segue:
50 <head runat="server"> <title>Aplicação Exemplo</title> <asp:ContentPlaceHolder id="ContentPlaceHolderCabecalho" runat="server"> </asp:ContentPlaceHolder> </head> <body>
<form id="form1" runat="server"> ... <!-- Conteúdo padrão --> <div class="conteudo"> <asp:contentplaceholder id="MainContentPlaceHolder" runat="server" /> ... <!-- conteúdo --> </div> <div class="rodape"> <asp:contentplaceholder id="ContentPlaceHolderRodape" runat="server">
<asp:label id="lblRodape" runat="server" Text="Texto de Rodapé" /> </asp:contentplaceholder id="contentPlaceHolderRodape"> </div> ... </form> </body>
Criando uma Master Page
Para criar uma master page siga os seguintes passos:
1. No Solution Explorer, clique com o botão direito, e selecione Add New Item 2. Na caixa de dialogo Add New Item:
a. Na caixa templates, clique em Master Page b. Na lista de linguagens selecione C#
c. Marque a opção Place code in a separate file
d. Marque a opção Select master page caso queira gerar uma master page aninhada
e. Clique no botão Add
Content Page
Content Pages fornecem conteúdo para uma master page e são Web Forms que referenciam uma master page específica. Você tendo uma ou mais master pages no seu projeto, você pode adicionar novas Content Pages ou converter seus Web Forms existentes em Content Pages.
Características da Content Page
Você pode referenciar uma master page utilizando o atributo MasterPageFile na diretiva Page da sua Content Page como abaixo:
51
AutoEventWireup="true" CodeFile="ContentPage.aspx.cs" Inherits="ContentPage" %>
Especificando a master page na diretiva Page, você pode usar mais de uma master page no seu projeto utilizando master pages diferentes em diferentes Web Forms. Você também pode especificar uma master page a nível de aplicação no arquivo web.config:
<pages masterPageFile="MasterPage.master" />
Ficando dessa forma indicado que todas as páginas ASP.NET (arquivos .aspx) na aplicação devem ser automaticamente ligados à master page indicada. Com exceção dos arquivos que tiverem o atributo MasterPageFile especificados, estes serão linkados a master page indicada por essa diretiva.
As Content Page devem ter no mínimo um controle Content e o mesmo deve referenciar um ContentPlaceHolder na master page conforme exemplo:
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>
No exemplo acima os controles Content referenciam na master page os
ContentPlaceHolders head e ContentPlaceHolder1. Ou seja, na master page para a content page acima teríamos:
<head runat="server">
<title>Untitled Page</title>
<asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder>
</head> <body>
<form id="form1" runat="server"> <div> <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </form> </body>
52
Criando uma Content Page
Após ter criado a master page, no Solution Explorer, clique com o botão direito sobre a pasta do projeto, e selecione “Add New Item...”
Na caixa de diálogo Add New Item, selecione o template Web Form, marque a opção Select Master Page e clique em Add:
53
Os controles Content da página criada, referenciarão automaticamente os Content Place Holders da master page selecionada.
User Controls
User Controls, ou controles do usuário, são páginas ASP.NET que outros Web Forms podem importar como se fossem Server Controls. User Controls fornecem elementos de interface e outras funcionalidades. Depois de você criar um user control, qualquer web page da aplicação podem utilizar esse controle.
Os User Controls são páginas ASP.NET com extensão .ascx. Podemos criar um user control para ampliar a funcionalidade de um determinado controle, ou constituir um conjunto de diversos controles que junto interajam para executar uma determinada tarefa, por exemplo, um grupo de controles para cadastrar os dependentes de um funcionário.
Os User Controls simplificam a reutilização de código e a criação de elementos de interface de uso corriqueiro.
Por default, o IIS 7.0 não permite que os arquivos com a extensão ascx sejam vistos em um navegador.
Características de um User Control
Um user control consiste de código HTML, mas não pode conter elementos de alto nível como as tags HTML, body ou form.
Quando o user control é inserido em um web form, ele passa a participar do ciclo de eventos deste Web Form. Mas como um user control é também uma página ASP.NET
54
, ele tem sua própria lógica. Por exemplo, um user control pode gerenciar seu evento de postback no seu próprio controlador de eventos Page_Load.
User Controls e seus Arquivos Associados Code-Behind
Os user controls contém a diretiva Control que é equivalente a diretiva Page de um Web Form. Se você escolher guardar o código de um user controle em um arquivo code-behind, fará essa referencia. É permitido somente uma diretiva control em cada arquivo .ascx
Por exemplo:
<%@ Control Language="C#" AutoEventWireup="true"
CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
A diretiva Control suporta quase todos atributos da diretiva Page. Entretanto, não suporta o atributo Trace. Caso você queira usar o Trace, deve ativar na página em que o controle se encontra ou na aplicação.
Vantagens dos User Controls
Os User Controls oferecem as seguintes vantagens:
São encapsulados. Possuem namespaces próprios para variáveis, o que garante que seus métodos e propriedades não conflitam com outros existentes nas página que em se encontram.
Podem ser usados múltiplas vezes.
Podem ser escritos em liguagens diferentes da linguagem principal da página em que se encontram.
Podem ser compartilhados na aplicação.
Desvantagens dos User Controls
O código pode se tornar redundante. Quando o user control é compartilhado entre aplicações, é difícil manter a interface e o código, pois você deve modificar todas as instâncias se o controle for genérico. Se o código do user controle é genérico ou não for logicamente abstrato, você precisa reescrever o código em cada página em que estiver sendo usado.
O código fica visível. O arquivo com o code-behind é visível a qualquer um que tenha acesso a aplicação web, anão ser que esta seja uma aplicação pré- compilada.
Convertendo um Web Form em um User Control Remova todos elementos HTML de alto nível Mude a diretiva Page para Control
Adicione o atributo ClassName a diretiva Control Mude a extensão de aspx para ascx
55
Adicione propriedades ao controle para permitir acesso aos dados privados do user control, se houver algum. Essas propriedades funcionam da mesma maneira que em um Web Form.
Adicionando um User Control a um Web Form
Você adiciona um user control em um Web Form utilizando a diretiva Register:
<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>
O atributo tagprefix determina um namespace único para cada controle inserido à página. O atributo TagName é único para cada user control. O atributo Src é o caminho virtual para o arquivo do mesmo.
Após você registrar o controle, você pode inserir o mesmo na página como qualquer outro controle. Por exemplo:
<uc1:WebUserControl ID="WebUserControl1" runat="server" />
Você também pode arrastar um user control do Solution Explorer para o Web Form. Quando você faz isso, o Visual Studio automaticamente adiciona a diretiva Register à página.
56