índice de Visual Studio 2005 y .NET Framework 2.0 Trucos .NET 2.0

Acceder a las propiedades de una Master Page

Cómo configurar una página Web de ASP.NET 2.0 para acceder por código a las propiedades y métodos de una página maestra

 
Publicado: 30/Abr/2006
Actualizado: 30/Abr/2006
Autor: Guillermo 'guille' Som
Pulsa para votar este artículo en Panorama Box


Introducción

Como sabrás, en ASP.NET 2.0 podemos utilizar las páginas maestras (Master Page) para darle a las páginas de un sitio Web un estilo más homogéneo, el propio Visual Web Developer (VWD) se encarga de ayudarnos a crear las páginas .aspx que utilizarán las páginas maestras, de hecho, cuando creamos una página que utiliza una página maestra (Master Page), el código será como el siguiente:

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" Title="Título de la página" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>

Este código (al menos el de la primera línea), puede variar un poco, según estemos usando un fichero independiente para el código de la página.

Para darle más utilidad a la página maestra, es posible que añadamos algunas propiedades, pero si queremos acceder a esas propiedades lo tendremos complicado, al menos si tenemos el código tal y como lo crea el IDE de Visual Studio 2005.
Por suerte, la solución es fácil, y lo único que tendrás que hacer es lo que te voy a explicar a continuación.

Después de la primera línea mostrada anteriormente añade lo siguiente:

<%@ MasterType VirtualPath="~/MasterPage.master" %>

O bien esto otro, ya que, al menos a mi, algunas veces me funciona bien con el código anterior y otras con el siguiente:

<%@ MasterType TypeName="MasterPage" %>

¿Por qué no funciona siempre igual con los dos?
Ni idea... así que, prueba con uno de los dos y el que mejor te "rule", pues usa ese...

 

En cualquier caso, la cadena "~/MasterPage.master" usada con VirtualPath será el nombre de la página maestra (por tanto tendrás que usar el nombre que tu hayas usado).
Y por otro lado, el valor "MasterPage" usado con TypeName será el nombre de la clase de esa página maestra.

 

Nota:
Lo que si debes saber es que NO puedes usar VirtualPath y TypeName a la vez, solo debes usar uno de los dos.

 

Y esto es todo... poco, pero al menos así no tendrás que "comerte el coco" para conseguir acceder a las propiedades de la página maestra...

Más abajo tienes un ejemplo (tanto para Visual Basic como para C#) de cómo crear una propiedad en la página maestra y cómo usarla desde una página que usa esa página maestra.

¡Que lo master-peich bien!

Nos vemos.
Guillermo


Un ejemplo de cómo usar las propiedades de una Master Page

Supongamos que tenemos una página maestra llamada MasterPage.master (el nombre predeterminado).
En esa página hemos añadido, entre otras cosas, un H1 para el título a mostrar, ese H1 está definido de esta forma en la página maestra:

<h1 id="H1Titulo" runat="server">Pagina principal</h1>

 

Y en el código de la página maestra tenemos lo siguiente:

Para Visual Basic:

Partial Class MasterPage
    Inherits System.Web.UI.MasterPage

    Private m_Titulo As String
    Public Property Titulo() As String
        Get
            Return m_Titulo
        End Get
        Set(ByVal value As String)
            m_Titulo = value
            Me.H1Titulo.InnerText = value
        End Set
    End Property
End Class

 

Para C# 2005:

public partial class MasterPage2 : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    private string m_Titulo;
    public string Titulo
    {
        get
        {
            return m_Titulo;
        }
        set
        {
            m_Titulo = value;
            this.H1Titulo.InnerText = value;
        }
    }
}

 

Para que el contenido del H1 cambie en cada página lo que haremos es escribir lo siguiente en las páginas que utilicen esa página maestra: (este es el código completo de una página que simplemente asigna el texto a mostrar en el H1 de la página maestra):

 

Para Visual Basic 2005:

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" Title="Título de la página" %>

<%@ MasterType TypeName="MasterPage" %>

<script runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Me.Master.Titulo = "Mi página que usa una Master Page"
    End Sub

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>

 

Para C# 2005:

<%@ Page Language="C#" MasterPageFile="~/MasterPage2.master" Title="Prueba de C#" %>

<%@ MasterType TypeName="MasterPage2" %>

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Master.Titulo = "Mi prueba de Master Page desde C#";
    }

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>

 


la Luna del Guille o... el Guille que está en la Luna... tanto monta...