Colabora .NET

Otra forma de acceder a las propiedades de una Master Page

Acceder por código directamente a las propiedades y métodos de una página maestra de ASP.NET 2.0

 

Fecha: 08/Sep/2006 (08/09/06)
Autor: El Tucán - rrmontero@gmail.com

 


Introducción

En ésta misma web, me leí el artículo que pretendo complementar. Dicho artículo es "Acceder a las propiedades de una Master Page". Lo estuve probando y no me funcionaba del todo bien, así que investigué un poco, hice algunas pruebas y al final se encendió la luz.

Desarrollo

La idea es que, como todo en .NET, la MasterPage es un objeto. Cómo tal, si declaras una propiedad pública ésta debe ser visible desde fuera. Cualquier página que haga uso de la MasterPage debe poder acceder a sus propiedades públicas. De hecho, dicha página que la usa tiene la propiedad this.Master que devuelve un tipo MasterPage que está asociado a la página en cuestión. Como devuelve un tipo MasterPage genérico, lo convertimos al tipo de nuestra MasterPage particular. De ésta forma, no es necesario incluir ninguna directiva en el código HTML. Es decir, no es necesario incluir en el código ninguna de las dos directivas:

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

Para que quede más claro escribiré un poco de código.

Ejemplo:

En la MasterPage únicamente codificamos la propiedad que queremos que sea pública. Para seguir con el artículo al que hago referencia, codificaremos la propiedad título en la MasterPage:

Para Visual Basic 2005:

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;
        }
    }
}

Ahora en la página que hace uso de la MasterPage hacemos la llamada a esa propiedad:

Para Visual Basic 2005:

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

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
   
        CType(Me.Master, MasterPage).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#" %><script runat="server">

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

</script>

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

Fin

Espero que les sirva ;-)

Un saludo,

El Tucán

 



ir al índice principal del Guille