Exportar (0) Imprimir
Expandir todo

Información general sobre el ciclo de vida de una página ASP.NET

Cuando se ejecuta una página ASP.NET, ésta recorre un ciclo de vida en el que realiza una serie de pasos de procesamiento. Entre ellos se incluyen la inicialización, la creación de instancias de controles, la restauración y el mantenimiento del estado, la ejecución del código del controlador de eventos y la representación. Es importante que comprenda el ciclo de vida de la página para que pueda escribir código en la fase del ciclo de vida apropiada y conseguir el efecto deseado. Además, si crea controles personalizados, debe estar familiarizado con el ciclo de vida de la página para poder inicializarlos, asignar datos de estado de vista a las propiedades de los controles y ejecutar el código de comportamiento de éstos correctamente. (El ciclo de vida de un control está basado en el ciclo de vida de la página, pero ésta produce en un control más eventos de los que están disponibles para la página ASP.NET por sí sola.)

Fases generales del ciclo de vida de la página

En términos generales, la página recorre las fases descritas en la tabla siguiente. Además de las fases del ciclo de vida de la página, existen las fases de la aplicación que se producen antes y después de una solicitud, pero no son específicas de una página. Para obtener más información, consulte Información general sobre el ciclo de vida de una aplicación ASP.NET.

Fase Descripción

Solicitud de página

La solicitud de página se produce antes de que comience el ciclo de vida de la página. Cuando un usuario solicita la página, ASP.NET determina si ésta se debe analizar y compilar (a fin de que comience el ciclo de vida de la página) o si se puede enviar una versión en caché de la página como respuesta sin ejecutar la página.

Inicio

En el paso de inicio, se establecen las propiedades de la página, como Request y Response. En esta fase, la página también determina si la solicitud es una devolución de datos o una nueva solicitud, y establece la propiedad IsPostBack. Además, durante esta fase se establece la propiedad UICulture de la página.

Inicialización de página

Durante la inicialización de la página, los controles incluidos en ella están disponibles y se establece la propiedad UniqueID de cada uno de ellos. Además, se aplican los temas correspondientes a la página. Si la solicitud actual es una devolución de datos, los datos de devolución aún no se han cargado y los valores de las propiedades del control no se han restaurado a los valores del estado de vista.

Carga

Durante la carga, si la solicitud actual es una devolución de datos, las propiedades del control se cargan con información recuperada del estado de vista y del estado del control.

Validación

Durante la validación, se llama al método Validate de todos los controles de validación, que establece la propiedad IsValid de cada uno de los controles de validación y de la página.

Control de eventos de devolución de datos

Si la solicitud es una devolución de datos, se llama a los controladores de eventos.

Representación

Antes de representar los datos, se guarda el estado de vista de la página y de todos los controles. Durante la fase de representación, la página llama al método Render para cada control, proporcionando un escritor de texto que escribe su resultado en OutputStream de la propiedad Response de la página.

Descarga

Se llama a la descarga cuando la página se ha representado completamente, se ha enviado al cliente y está lista para ser descartada. Llegado este momento, se descargan las propiedades de la página, como Response y Request, y se llevan a cabo las operaciones de limpieza correspondientes.

Eventos del ciclo de vida

Dentro de cada fase del ciclo de vida de una página, ésta produce eventos que puede controlar para ejecutar su propio código. En los eventos de control, el controlador de sucesos se debe enlazar al evento, bien mediante declaración utilizando atributos como onclick o bien en el código.

Las páginas también admiten la conexión automática de eventos, lo que significa que ASP.NET busca métodos con nombres determinados y los ejecuta automáticamente cuando se provocan ciertos eventos. Si el atributo AutoEventWireup de la directiva @ Page se establece en true (o si no está definido, ya que de forma predeterminada es true), los eventos de página se enlazan de forma automática a los métodos que utilizan la convención de nomenclatura Page_evento, por ejemplo Page_Load y Page_Init. Para obtener más información sobre la conexión automática de eventos, consulte Modelo de eventos de control de servidor Web ASP.NET.

En la tabla siguiente se muestran los eventos del ciclo de vida de la página que se utilizan con más frecuencia. Hay más eventos de los que se muestran, pero éstos no se utilizan en la mayoría de los escenarios de procesamiento de páginas. Los utilizan fundamentalmente los controles de servidor de la página Web ASP.NET para sus propias tareas de inicialización y representación. Si desea escribir sus propios controles de servidor ASP.NET, necesitará saber más sobre estas fases. Para obtener información sobre cómo crear controles personalizados, consulte Desarrollar controles de servidor ASP.NET personalizados.

Evento de página Uso típico

PreInit

Utilice este evento para lo siguiente:

  • Examine la propiedad IsPostBack para determinar si es la primera vez que se procesa la página.

  • Crear o volver a crear controles dinámicos.

  • Establecer una página maestra de forma dinámica.

  • Establecer la propiedad Theme de forma dinámica.

  • Leer o establecer los valores de las propiedades de perfil.

    NoteNota

    Si la solicitud es una devolución de datos, los valores de los controles todavía no se han restaurado del estado de vista. Si establece una propiedad de un control en esta fase, es posible que su valor se sobrescriba en el evento siguiente.

Init

Se provoca cuanto todos los controles se han inicializado y se aplicado la configuración de máscara. Utilice este evento para leer o inicializar las propiedades del control.

InitComplete

Lo provoca el objeto Page. Utilice este evento para tareas de procesamiento que requieran que todo el proceso de inicialización haya finalizado.

PreLoad

Utilice este evento si necesita realizar tareas de procesamiento en su página o control antes de que se provoque el evento Load.

Después de que Page provoca este evento, carga su estado de vista y el de todos los controles y, después, procesa todos los datos de devolución incluidos con la instancia de Request.

Load

Page llama al método del evento OnLoad en Page, realiza la misma operación de forma recursiva para cada control secundario, los cuales realizan la misma operación para cada uno de sus controles secundarios hasta que se cargan la página y todos los controles.

Utilice el método del evento OnLoad para establecer las propiedades de los controles y establecer las conexiones a bases de datos.

Eventos de control

Utilice estos eventos para controlar eventos de control específicos, como un evento Click del control Button o un evento TextChanged del control TextBox.

NoteNota

En una solicitud de devolución de datos, si la página contiene controles de validación, compruebe la propiedad IsValid de Page y de cada uno de los controles de validación antes de realizar cualquier procesamiento.

LoadComplete

Utilice este evento para las tareas que requieran que se carguen todos los demás controles en la página.

PreRender

Antes de que se produzca este evento:

El evento PreRender se produce para cada control de la página. Utilice el evento para realizar cambios finales en el contenido de la página o en sus controles.

SaveStateComplete

Antes de que se produzca este evento, ViewState se ha guardado para la página y para todos los controles. Se omitirán todos los cambios que se realicen en este momento en la página o en los controles.

Utilice este evento para realizar tareas que requieran guardar el estado de vista, pero que no efectúen cambios en los controles.

Render

Éste no es un evento; en esta fase del procesamiento, el objeto Page llama a este método en cada control. Todos los controles de servidor Web de ASP.NET tienen un método Render que escribe el marcado del control que se envía al explorador.

Si crea un control personalizado, normalmente reemplazará este método para generar el marcado del control. Sin embargo, si el control personalizado sólo incorpora controles de servidor Web de ASP.NET estándar y ningún marcado personalizado, no necesita reemplazar el método Render. Para obtener más información, consulte Desarrollar controles de servidor ASP.NET personalizados.

Un control de usuario (un archivo .ascx) incorpora automáticamente la representación, por lo que no necesita representar explícitamente el control en el código.

Unload

Este evento se produce para cada control y después para la página. En los controles, utilice este evento para realizar tareas finales de limpieza en controles específicos, como cerrar las conexiones a bases de datos específicas del control.

Para la propia página, utilice este evento para hacer un último trabajo de limpieza, como cerrar archivos abiertos y conexiones a bases de datos, finalizar el registro u otras tareas específicas de la solicitud.

NoteNota

Durante la fase de descarga, la página y sus controles ya se han representado, por lo que no se podrán realizar más cambios en la secuencia de respuesta. Si intenta llamar a un método, como Response.Write, la página producirá una excepción.

Consideraciones adicionales sobre el ciclo de vida de la página

Cada uno de los controles de servidor ASP.NET tiene su propio ciclo de vida, que es similar al ciclo de vida de la página. Por ejemplo, los eventos Init y Load de un control se producen durante los eventos de página correspondientes.

Aunque los eventos Init y Load se producen de forma recursiva en cada control, lo hacen en orden inverso. El evento Init (y también el evento Unload) de cada control secundario se produce antes de que se provoque el evento correspondiente para su contenedor (orden ascendente). Sin embargo, el evento Load de un contenedor se produce antes de los eventos Load de sus controles secundarios (orden descendente).

Puede personalizar el aspecto o contenido de un control controlando los eventos de dicho control, como el evento Click del control Button y el evento SelectedIndexChanged del control ListBox. En determinadas circunstancias, también se pueden controlar los eventos DataBinding o DataBound de un control. Para obtener más información, vea los temas de referencia de las clases de cada control y Desarrollar controles de servidor ASP.NET personalizados.

Al heredar una clase de la clase Page, además de controlar los eventos provocados por la página, puede reemplazar los métodos de la clase base de la página. Por ejemplo, puede reemplazar el método InitializeCulture de la página para establecer dinámicamente una referencia cultural. Tenga en cuenta que cuando se crea un controlador de eventos con la sintaxis Page_evento, se llama a la implementación base de forma implícita y, por consiguiente, no es necesario llamarla de nuevo en el método. Por ejemplo, siempre se llama al método OnLoad de la clase de la página base, tanto si se crea un método Page_Load como si no. Sin embargo, si reemplaza el método OnLoad de la página por la palabra clave override (Overrides en Visual Basic), deberá llamar de forma explícita al método base. Por ejemplo, si reemplaza el método OnLoad de la página, deberá llamar a base.Load (MyBase.Load en Visual Basic) para poder ejecutar la implementación base.

Poner eventos al día para controles agregados

Si los controles se crean dinámicamente en tiempo de ejecución o se crean mediante declaración dentro de plantillas de controles enlazados a datos, sus eventos no se sincronizan inicialmente con los de otros controles de la página. Por ejemplo, en el caso de un control que se agrega en tiempo de ejecución, los eventos Init y Load se pueden producir mucho más tarde en el ciclo de vida de la página que los mismos eventos de controles creados mediante declaración. Por consiguiente, desde el momento en que se crean sus instancias, los controles agregados dinámicamente y los controles en plantillas provocan sus eventos uno tras otro hasta que llegan al evento durante el cual se agregaron a la colección Controls.

En general, esto no debe preocuparle salvo que utilice controles enlazados a datos anidados. Si un control secundario se ha enlazado a datos, pero no así su control contenedor, los datos del control secundario y los datos de su control contenedor pueden no estar sincronizados. Esto ocurre especialmente si los datos del control secundario realizan el procesamiento en función del valor enlazado a datos del control contenedor.

Por ejemplo, suponga que tiene un GridView que muestra un registro de la empresa en cada fila junto con una lista de los empleados de la empresa en un control ListBox. Para rellenar la lista de empleados, enlaza el control ListBox a un control de origen de datos (como SqlDataSource) que recupera los datos de los empleados de la empresa utilizando el campo IdEmpresa en una consulta.

Si las propiedades de enlace de datos del control ListBox, como DataSourceID y DataMember, se establecen mediante declaración, el control ListBox intentará enlazar a su origen de datos durante el evento DataBinding de la fila que lo contiene. Sin embargo, el campo IdEmpresa de la fila no contendrá un valor hasta que se produzca el evento RowDataBound del control GridView. En este caso, el control secundario (el control ListBox) se enlaza antes de que se enlace el control contenedor (el control GridView), por lo que sus fases de enlace a datos no estás sincronizadas.

Para evitar esta situación, coloque el control de origen de datos del control ListBox en el mismo elemento de plantilla que el propio control ListBox y no establezca las propiedades de enlace de datos de ListBox mediante declaración. En lugar de ello, establézcalas mediante programación en tiempo de ejecución durante el evento RowDataBound, para que el control ListBox no se enlace a sus datos hasta que la información de IdEmpresa esté disponible.

Para obtener más información, consulte Establecer enlaces a datos utilizando un control de origen de datos.

Eventos de enlace de datos de controles enlazados a datos

Para ayudarle a entender la relación que existe entre el ciclo de vida de la página y los eventos de enlace de datos, en la tabla siguiente se muestran los eventos relacionados con datos en controles enlazados a datos como los controles GridView, DetailsView y FormView.

Evento de control Uso típico

DataBinding

Este evento lo provocan los controles enlazados a datos antes del evento PreRender del control contenedor (o del objeto Page) e indica el comienzo del enlace del control a los datos.

Utilice este evento para abrir manualmente conexiones a bases de datos, si es necesario. (Esta operación suele ser innecesaria con los controles de origen de datos).

RowCreated (sólo GridView) o ItemCreated (controles DataList, DetailsView, SiteMapPath, DataGrid, FormView y Repeater)

Utilice este evento para manipular contenido que no dependa del enlace de datos. Por ejemplo, en tiempo de ejecución, podría agregar formato mediante programación a una fila de encabezado o pie de página en un control GridView.

RowDataBound (sólo GridView) o ItemDataBound (controles DataList, SiteMapPath, DataGrid y Repeater)

Cuando se produce este evento, los datos están disponibles en la fila o elemento, por lo que puede dar formato a los datos o establecer la propiedad FilterExpression de los controles de origen de datos secundarios para mostrar datos relacionados dentro de la fila o elemento.

DataBound

Este evento marca el fin de las operaciones de enlace de datos en un control enlazado a datos. En un control GridView, el enlace de datos finaliza para todas las filas y todos los controles secundarios.

Utilice este evento para dar formato al contenido enlazado a datos o para iniciar el enlace de datos en otros controles que dependan de valores del contenido del control actual. (Para obtener información detallada, consulte "Poner eventos al día para controles agregados" anteriormente en este tema).

Eventos de control de inicio de sesión

El control Login puede utilizar la configuración del archivo Web.config para administrar automáticamente la autenticación de los miembros. Sin embargo, si su aplicación requiere que se personalice el modo de funcionamiento del control, o si desea entender cómo los eventos del control Login se relacionan con el ciclo de vida de la página, puede utilizar los eventos mostrados en la tabla siguiente.

Evento de control Uso típico

LoggingIn

Este evento se provoca durante una devolución de datos, después de que se produzca el evento LoadComplete de la página. Marca el principio del proceso de inicio de sesión.

Utilice este evento para tareas que deban producirse antes de que comience el proceso de autenticación.

Authenticate

Este evento se provoca después del evento LoggingIn.

Utilice este evento para reemplazar o mejorar el comportamiento de autenticación predeterminado de un control Login.

LoggedIn

Este evento se provoca una vez autenticado el nombre de usuario y la contraseña.

Utilice este evento para redirigir al usuario a otra página o para establecer dinámicamente el texto del control. Este evento no se produce si hay un error o no es posible realizar la autenticación.

LoginError

Este evento se provoca si la autenticación no tuvo éxito.

Utilice este evento para establecer texto en el control que explique el problema o para dirigir al usuario a una página diferente.

Vea también

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft