
14/07/2009, 20:37
|
 | | | Fecha de Ingreso: agosto-2002 Ubicación: Panamá
Mensajes: 962
Antigüedad: 22 años, 6 meses Puntos: 15 | |
Respuesta: Herencia, HTML table Label Bueno hablemos un poco de lo que es Herencia en la programación orientada a objetos.
Puedes ver en tu página aspx en el código que es una clase que hereda de System.Web.UI.Page y esta clase sería la base dandole todo lo que se necesita para que trabaje con la funcionalidades necesarias.
Lo que quieres hacer tiene todo el sentido de organización y es buenisimo tener esa visión ahora bien el concepto de herencia no lo tienes muy claro.
Ahora te ayudaré un poco en la única limitante cuando trabajas con clases bases propias que no sea Page. Tienes varios puntos que debes tomar en cuenta:
1- Cuando quieras accesar a controles que no sean de la clase base
2- Seguir manteniendo las funcionalidades de la clase principal de una página aspx que es System.Web.UI.Page
Las respuestas seria así:
1- Cuando quieras manipular controles deberas crear propiedades en la clase base para que le pases por referencia el control a el que la clase base tendra acceso.
Solo debes crear una propiedad dentro de la clase base así:
private Label _errorControl;
public Label ErrorControl
{
get { return _errorControl; }
set { this._errorControl = value; }
}
Ya con esto dentro de la clase base tendrás con que interactuar aunque aun no este conectado a el Control de salida.
Cualquier método dentro de la clase base puede hacer uso de esta propiedad sin pensar que control es el que hará la salida real. Solo ten en cuenta que si no lo referencias será nulo.
Ejemplo, mira este método que estará dentro de la clase base que hará uso de la propiedad ErrorControl:
public void ShowError(string errorMsg)
{
this._errorControl.Text = errorMsg;
}
2- Tu clase base deberá heredar todo de System.Web.UI.Page así que lo unico que harás es quitarle a la página aspx que herede de System.Web.UI.Page y que en vez de esa utilize tu clase base que heredará de System.Web.UI.Page.
Ejemplo, pongamosle nombre a tu página aspx como Default.aspx y tu clase base se llamará PageBase.cs, ahora bien tu página hereda de PageBase:
public partial class Default : PageBase
y tu clase base hereda de System.Web.UI.Page:
public class PageBase : System.Web.UI.Page
-----
Ahora bien tienes que atar los cabos sueltos mirando la relación así:
1- La clase base de todo es System.Web.UI.Page
2- La extensión de la clase Page es tu clase base llamada PageBase
3- Todas tus páginas que quieras no re-escribir código para control de mensajes de error y mensajes generales puedes quitarle que hereden de System.Web.UI.page y que hereden de tu clase base PageBase que dará esta funcionalidad
la herencia se vería así:
System.Web.UI.Page -> PageBase -> Default
--------
Ahora solo queda la pregunta de como unir el control dentro de tu página Default a el que se manipula dentro de PageBase?? simple en el evento Load_Form dentro de Default.aspx haces esa union. Ejemplo, tu label de error y de Mensajes se llaman errorMsg y Msg, en el Load_Form se vería así:
protected void Page_Load(object sender, EventArgs e)
{
this.ErrorControl = this.errorMsg;
this.MessageControl = this.Msg;
}
Ahora ya podrás hacer uso de el método heredado ShowError dentro de Default.aspx sin necesidad de escribirlo denuevo. Espero que todo lo dije claro solo ten en cuenta lo siguiente:
1- La clase base debe heredar de System.Web.UI.Page
2- La clase base debe tener su propiedad que represente el control que quieras manipular
3- El metodo de la clase base hará uso de la propiedad de el control
4- En tu página Default en el Load_Form deberas hacer la union de tu control con el de la clase base para que el método ShowError no se encuentre con que la Propiedad ErrorControl esta nula.
Saludos, |