Customiza la clase System.Web.UI.Page

Vaya un título extraño para un artículo, ¿No?

A veces lo más difícil de un artículo es encontrar un título que lo identifique totalmente, y es que vale más un simple ejemplo que mil palabras.

Vayamos al grano. Como sabréis, en vuestro Code-Behind (las páginas .aspx.cs) las partial classes comienzan por

    public partial class Default : System.Web.UI.Page

Lo que quiere decir que hereda (como todas las .aspx.cs) de la clase System.Web.UI.Page.

Lo que se pretende en este artículo es dar la oportunidad de que en lugar de que todas nuestras páginas hereden de Page, lo hagan de una clase nuestra... cada día me gusta más esto de la orientación a objetos

Esta clase que nos inventamos debe, obviamente, heredar de la clase Page. Pongamos un ejemplo:

namespace Subgurim
{
    using System;
    using System.IO;
    using System.Web.UI;

    /// <summary>
    /// Hereda de Xavi.MyPage, y todas las páginas de nuestra aplicación
    /// heredarán de ésta.
    /// </summary>
    public class MyPage : Page
    {
        /// <summary>
        /// Cuando se produzca un error, lo escribiremos en un fichero.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnError(EventArgs e)
        {
            base.OnError(e);
            StreamWriter writer = File.AppendText(Server.MapPath("~/errorlog.txt"));
            Exception ex = Server.GetLastError();
            writer.WriteLine(ex.Message + "[" + DateTime.Now + "]");
            writer.Close();
        }
    }
}

Con esta nueva clase, cada vez que se produzca un error quedará constancia de ello en un archivo (errorlog.txt) situado en la raíz de nuestra aplicación.

Para ello, lo único que tenemos que hacer es sustituir en todos los archivos de Code-Behind, esto:

    public partial class Default : System.Web.UI.Page

por esto

    public partial class Default : Subgurim.MyPage

Y así de fácil es.

En nuestro ejemplo, sólo lo hemos utilizado para hacer un log de errores, pero podemos utilizarlo para lo que queramos (o nuestra imaginación nos diga):

- Establecer culturas
- Hacer que ciertas palabras aparezcan subrayadas
- Asignar Themes a partir del profile de usuario
- Muchas cosas más