Master Pages

Anuncio
Marcos de Desarrollo
Diseño e implementación de aplicaciones Web con .NET
Objetivos
 Conocer la solución de ASP.NET para crear "plantillas"
de páginas Web
Master Pages
 ASP.NET 1.x carecía de sistema de plantillas
 Solución: controles de usuario, que permiten agrupar varios
controles
 ASP.NET 2.0: Master Pages
 Las Master Pages (páginas maestras) permiten crear un
diseño común, que será compartido por varias Content Pages
(páginas de contenido)
 Solución más elegante al problema de definir un "look and
feel" común
 Herencia visual
Master Pages
Página Maestra (Master Page)
Página de Contenido
(Content Page)
Master Pages
 Las páginas maestras definen las zonas de contenido variable, con el control
<asp:ContentPlaceHolder>

Es posible definir varias zonas de contenido variable en una misma página maestra (varios
ContentPlaceHolders)
 Las páginas de contenido hacen referencia a las páginas maestras y rellenan las zonas de
contenido variable con el control <asp:Content>

Todo contenido de una página de contenido debe aparecer entre controles Content
Site.master
default.aspx
<%@ Master ...
<%@ Page ...
MasterPageFile=
"~/Site.master" %>
<asp:ContentPlaceHolder
ID="Main"
runat="server" />
<asp:Content
ID="Content1"
ContentPlaceHolderID=
"Main" runat="server" />
</asp:Content>
http://... /default.aspx
Crear una página maestra
Master pages. Página maestra (.Master)
<%@ Master Language="C#" AutoEventWireup="true" Codebehind="MyMasterPage.master.cs"
Inherits="AspDotNetTutorial.MyMasterPage" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>ASP.NET Tutorial</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="window">
<!-- Body content. -->
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
<!-- Footer. -->
<div id="footer">© Universidad de A Coruña - 2012</div>
</div>
</body>
</html>
MyMasterPage.Master
Identifica el espacio
para el contenido
Crear una página de contenido
Master pages. Página de contenido (.aspx)
<%@ Page Language="C#" MasterPageFile="~/MyPageMaster.Master" AutoEventWireup="true"
Codebehind="MyContentPage.aspx.cs"
Inherits="AspDotNetTutorial.MyContentPage"
Title="My Content Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
</form>
</asp:Content>
Indica qué
contenedor rellena
MyContentPage.aspx
Contenido por defecto
 Los controles ContentPlaceHolder pueden definir
contenido por defecto
 El contenido por defecto se muestra únicamente si la
página de contenido no lo sobrescribe
<%@ Master ... %>
...
<asp:ContentPlaceHolder ID="Main" runat="server">
Este es el contenido por defecto, que aparecera si no hay
ningun control <asp:content> que le proporcione contenido
en una página de contenido hija
<asp:ContentPlaceHolder>
Páginas maestras anidadas
 Es posible crear una página maestra que haga
referencia a una página maestra ya existente
 Una página maestra (padre) define la apariencia general
del sitio
 Otra página maestra basada en la primera (hija)
extiende la apariencia visual del sitio Web
 De utilidad en grandes sitios Web en los que existen
subconjuntos de páginas que comparten apariencia
visual
Páginas maestras anidadas
 Página maestra "padre"
<%@ Master Language="C#" AutoEventWireup="true"
Codebehind="ParentMaster.master.cs" Inherits="WebApplication1.ParentMaster" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>New Website</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>This is parent master code</h1>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
Páginas maestras anidadas
 Página maestra "hija"
<%@ Master Language="C#" MasterPageFile="~/ParentMaster.Master"
AutoEventWireup="true"
Codebehind="ChildMaster.master.cs" Inherits="WebApplication1.ChildMaster" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
runat="server">
<h2>This is child master code</h2>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</asp:Content>
Páginas maestras anidadas
 Página de contenido
<%@ Page Language="C#" MasterPageFile="~/ChildMaster.Master"
AutoEventWireup="true" Codebehind="WebForm1.aspx.cs"
Inherits="WebApplication1.WebForm1" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
runat="server">
<p>This is content code</p>
</asp:Content>
Páginas maestras anidadas
 Resultado
Aplicar una página maestra a un sitio Web
 Es posible designar la página maestra de todas las páginas pertenecientes a un
mismo sitio Web
 Archivo Web.config
<configuration>
<system.web>
<pages masterPageFile="~/MasterPage.master" />
</system.web>
</configuration>
 Todas las páginas que tengan controles Content se combinarán con la página
principal especificada
 Se asegura que todas las páginas del sitio Web seguirán el diseño de la página
maestra, incluso aquéllas que carezcan del atributo MasterPageFile en la
directiva <%@ Page
 La definición a nivel de página tiene preferencia sobre la definición a nivel de
aplicación
La propiedad Page.Master
 En ocasiones, puede ser necesario acceder desde una página de contenido a
controles definidos en la página maestra
 La propiedad Page.Master devuelve una referencia a la página maestra
 Instancia de clase derivada de System.Web.UI.MasterPage
 Null si la página no está asociada a una página maestra
 Permite acceder a contenido definido en la página maestra. Opciones:
 Weak Typing, utilizando FindControl()
 Strong Typing, utilizando propiedad pública (más recomendable)
La propiedad Page.Master
 Weak Typing, utilizando FindControl()

Pág. Maestra, .aspx:
<asp: Label ID="Title" runat="server"/>

Pág. Contenido, .aspx.cs:
((Label)Page.Master.FindControl("Title")).Text = "Orders";
La propiedad Page.Master
 Strong Typing, utilizando propiedad pública (más recomendable)

Pág. Maestra, .aspx:
<asp: Label ID="Title" runat="server"/>

Pág. Maestra, .aspx.cs:
public String TitleText {
get { return Title.Text; }
set { Title.Text = value; }
}

Pág. Contenido, .aspx.cs:
Page.Master.TitleText = "Orders";
Página maestra según el navegador
 Es posible seleccionar automáticamente una página
maestra dependiendo del navegador
 Ejemplo:
<%@ Page Language="C#" MasterPageFile="~/General.Master"
Chrome:MasterPageFile="~/Chrome.Master"
Opera:MasterPageFile="~/Opera.Master" ... %>
 Lista de navegadores disponibles (en el servidor de
producción):

C:\Windows\Microsoft.NET\Framework\[Version]\Config\Browsers
 Algunos ejemplos:
 blackberry, chrome, firefox, ie, iemobile, iphone, opera, safari
 Se pueden añadir archivos .browser si es necesario
Bibliografía
 Recomendada:
 M. MacDonald, A. Freeman, M. Szpuszta. Pro ASP.Net
4 in C# 2010. 4th Ed. Apress. 2010.
Descargar