Tipando el acceso a los controles de nuestra Master Page desde propiedades creadas por nosotros
Como bien sabéis podemos acceder a los controles de nuestra Master Page por medio del método FindControl, pero esto nos obliga a hacer un casting del tipo de control que queremos acceder y a saber el ID del control.
Imaginaros que tenemos un cliente que tiene 2 compañias, Compañía1 y Compañía2 y lo único que debe cambiar de nuestra página maestra es el Logo, dependiendo si el usuario pertenece a una o a otra. Entonces desde la página de inicio podríamos hacer:
Image logo = (Image)Master.FindControl("ImageLogoCorporativo");
if (PerteneceCompania1(User.Identity.Name))
{ logo.ImageUrl = "Compania1.gif";
}
else
{ logo.ImageUrl = "Compania2.gif";
}
El código es correcto pero el programador debe saber como se llama el control y de que tipo es y además cada vez que se quiera acceder debemos hacer un casting al tipo Image, bla,bla.....
Para facilitar esta tarea y hacer nuestro código mas fácil y legible, podemos crearnos una propiedad en la página maestra del tipo Image para acceder a la imagen del logo de la página maestra:
public Image Logo
{ get { return ImageLogoCorporativo; }}
Y ahora podríamos acceder directamente desde la página contenedora:
¿Pero que pasa? No está, si yo la he declarado como pública...
El problema es que para acceder a las propiedades de la página maestra necesitamos incluir una directiva de página MasterType en la página contenedora en la que queremos acceder a las propiedades de la página maestra:
<%@ MasterType VirtualPath="~/MasterPage.master" %>
Y ahora sí:
Como véis el Intellisense nos reconoce la propiedad de tipo Image de nuestra página maestra y nuestro código queda más legible.
Este método de acceso lo podemos aplicar tambiéna variables privadas ;)
Un saludo