2. Aplicaciones ASP.NET
Aplicaciones Web y Ciclo de vida de una página.
.NET es un poco peculiar a la hora de procesar las peticiones web. El protocolo HTTP tiene la peculiaridad de no conservar el estado ya que no mantiene una conexión permanente entre cliente y servidor. Por tanto la información de estado debe guardarse de alguna manera. .NET ofrece un mecanismo llamado viewstate. Así, surgen dos tipos de peticiones:
  1. La primera petición. Todo lo que se ha metido en un formulario es serializado en una variable oculta.
  2. El postback. Estas son las peticiones posteriores a la primera. Aquí ya contamos con la variable oculta que antes de nada se deserializa para aplicar cambios en los controles.

Cuando un usuario solicita una página .NET estos son los pasos que se siguen:
  1. El navegador realiza la petición
  2. Inicialización del framework de la página: .NET genera todos los controles de la página .aspx. Aquí es donde .NET dispara el evento page.Init() Si la página ya había sido solicitada deserializa los datos de estado y aplica los cambios pertinentes en campos de texto o selecciones de listas desplegables.
  3. Inicialización del código del usuario: estamos en el evento Page.Load(), aquí es donde se puede personalizar la página o cargar datos en los controles, etc... ¿Cómo puede un programador distinguir si la página se carga por primera vez? con if (!IsPostBack). De todas formas conviene tener inicializados los controles desde sus propiedades para no cargar el viewstate.
  4. Validacion: si hemos incluido controles de validación el formulacio en esta fase se pasarán los datos por ese filtro. Todo de forma automática, aunque si queremos preguntar si la página es válida podemos ver la propiedad Page.IsValid.
  5. Soporte de eventos: una vez la página está cargada y validada en el servidor se da respuesta a los eventos, que pueden ser de dos tipos:
    1. Inmediatos: los generados por botones de submit o cualquier control que haga postBack().
    2. Los eventos de modificación: cuando se modifica el contenido en un control o una se cambia una selección por ejemplo. En caso de tener la propiedad de AutoPostBack a true se ejecutan de inmediato y si no lo hacen al enviar la página.
  6. PreRender: esta es la fase previa antes de enviar la respuesta al servidor. Aquí se suele aprovechar para asociar datos a controles.
  7. Envío de respuesta al navegador.
  8. Limpieza. Tras mandar la respuesta se ejecuta el evento Page.UnLoad(). Aquí podemos hacer limpia de objetos, y lo que no hagamos lo hará el recolector de basura. Finalmente se ejecutará el evento Page.Disposed().
Así como se suele personalizar el método Page_Load también podriamos hacer lo propio con los demás métodos que forma parte de este ciclo:
private void Page_Init(object sender, System.EventArgs e)
{
...
}

private void Page_Load(object sender, System.EventArgs e)
{
...
}

private void Page_PreRender(object sender, System.EventArgs e)
{
...
}

private void Page_UnLoad(object sender, System.EventArgs e)
{
...
}

Generalmente solo se reescribe el método Page_Load.