Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.
Traducción
Original

Modelo de eventos de control de servidor web ASP.NET

Una característica importante de ASP.NET es que permite programar páginas Web utilizando un modelo basado en eventos similar al de las aplicaciones de cliente. Como ejemplo sencillo, se puede agregar un botón a una página Web ASP.NET y, a continuación, escribir un controlador de eventos para el evento de clic del botón. Aunque esto es habitual en páginas Web que funcionan exclusivamente con un script de cliente (que controla el evento onclick del botón en HTML dinámico), ASP.NET traslada este modelo al procesamiento basado en servidor.

Los eventos producidos por los controles de servidor ASP.NET funcionan de manera diferente a los eventos de las páginas HTML tradicionales o de las aplicaciones Web basadas en el cliente. La diferencia se basa principalmente en la separación existente entre el propio evento y el lugar donde se controla el evento. En las aplicaciones basadas en cliente, los eventos se producen y controlan en el cliente. Sin embargo, en las páginas Web ASP.NET, los eventos asociados a los controles de servidor se originan en el cliente (explorador) pero los controla la página ASP.NET en el servidor Web.

Para los eventos que se producen en el cliente, el modelo de control de eventos Web ASP.NET necesita que la información del evento se capture en el cliente y que se transmita un mensaje de evento al servidor mediante un envío HTTP. La página debe interpretar el envío para determinar el evento ocurrido y, a continuación, llamar al método apropiado del código del servidor para controlar dicho evento.

ASP.NET controla la tarea de capturar, transmitir e interpretar el evento. Al crear controladores de eventos en una página Web ASP.NET, no es necesario saber capturar la información del evento y hacer que esté disponible para el código. En cambio, se pueden crear controladores de eventos casi de la misma forma que en un formulario de cliente tradicional. Sin embargo, hay diversos aspectos del control de eventos en las páginas Web ASP.NET que se deben tener en cuenta.

Debido a que los eventos de controles de servidor ASP.NET requieren un viaje de ida y vuelta al servidor para procesarse, pueden afectar al rendimiento de una página. Por lo tanto, los controles de servidor ofrecen un conjunto limitado de eventos, normalmente sólo de tipo clic. Algunos controles de servidor admiten los eventos de cambio. Por ejemplo, el control CheckBox de servidor Web produce un evento de cambio CheckedChanged cuando el usuario hace clic en el cuadro. Algunos controles de servidor admiten eventos más abstractos. Por ejemplo, el control de servidor Web Calendar provoca un evento SelectionChanged que es una versión más abstracta del evento de clic.

Los eventos que tienen lugar con frecuencia (y que pueden provocarse sin que el usuario lo sepa), como onmouseover, no se pueden usar en los controles de servidor. Los controles de servidor ASP.NET siguen pudiendo llamar a los controladores de cliente para esos eventos, como se explica más adelante en Modelo de eventos de control de servidor web ASP.NET.

Los controles y la propia página también provocan eventos de ciclo de vida en cada paso del procesamiento, como Init, Load y PreRender. Puede aprovecharse de estos eventos de ciclo de vida en la aplicación. Por ejemplo, en el evento Load de una página, puede establecer valores predeterminados para los controles.

Los eventos de los controles y de páginas ASP.NET siguen un modelo de .NET Framework estándar para los métodos de controladores de eventos. Todos los eventos pasan dos argumentos: un objeto que representa al objeto que ha provocado el evento, y un objeto evento que contiene la información específica del evento. El segundo argumento suele ser de tipo EventArgs, pero para algunos controles es de un tipo específico de dicho control. Por ejemplo, para un control ImageButton de servidor Web, el segundo argumento es de tipo ImageClickEventArgs, que incluye información sobre las coordenadas donde el usuario ha hecho clic.

NotaNota

Los eventos para la página (como Load) pueden aceptar los dos argumentos estándar, pero en estos argumentos no se pasa ningún valor.

En los controles de servidor, algunos eventos, generalmente los de clic, hacen que la página se envíe de vuelta inmediatamente al servidor. Los eventos de cambio en los controles de servidor HTML y de servidor Web, como el control TextBox, no ocasionan que se produzca una acción de envío inmediatamente. En su lugar, se generan la próxima vez que tenga lugar una acción de envío.

NotaNota

Si el explorador lo admite, los controles de validación pueden comprobar la entrada de datos del usuario mediante scripts de cliente sin realizar un viaje de ida y vuelta al servidor. Para obtener información detallada, vea Validar la información especificada por el usuario en páginas web ASP.NET.

Una vez enviada de vuelta una página, se generan los eventos de inicialización (Page_Init y Page_Load) de la misma y, a continuación, se procesan los eventos de control. No se debería crear una lógica de aplicación en la que los eventos de cambio se generen en un orden específico a no ser que se conozca con detalle el procesamiento de los eventos de página. Para obtener información detallada, vea Información general sobre el ciclo de vida de una página ASP.NET.

Si resulta útil para una aplicación, se puede especificar que los eventos de cambio provoquen el envío de la página. Los controles de servidor Web que admiten un evento de cambio incluyen la propiedad AutoPostBack. Cuando esta propiedad está establecida como true, el evento de cambio del control provoca el envío inmediato de la página, sin esperar a que se produzca un evento de clic. Por ejemplo, de forma predeterminada, el evento CheckedChanged de un control CheckBox no provoca el envío de la página. Sin embargo, si se establece la propiedad AutoPostBack del control en true, en cuanto un usuario active la casilla, la página se envía al servidor para ser procesada.

NotaNota

Para que la propiedad AutoPostBack funcione correctamente, el explorador del usuario deberá estar configurado para permitir la ejecución de scripting. Ésta es la configuración predeterminada en la mayoría de casos. Sin embargo, algunos usuarios deshabilitan el scripting por razones de seguridad. Para obtener información detallada, vea Scripts de cliente en páginas Web ASP.NET.

Los controles de servidor Web como Repeater, DataList, GridView, FormView y DetailsView pueden contener controles de botón que a su vez generen eventos. Por ejemplo, cada fila de un control GridView puede contener uno o varios botones creados dinámicamente mediante plantillas.

En lugar de que cada botón provoque individualmente un evento, los eventos de los controles anidados se reenvían al control del contenedor. El contenedor produce a su vez un evento genérico ItemCommand con parámetros que permite detectar qué control en concreto ha producido el evento original. Respondiendo a este evento único, puede ahorrarse tener que escribir controles de eventos individuales para cada control secundario.

El evento ItemCommand incluye los dos argumentos de evento estándar, un objeto que hace referencia al origen del evento y un objeto de evento que contiene información específica del mismo.

NotaNota

Los controles GridView, DataList y otros controles de datos admiten eventos adicionales, como EditCommand, DeleteCommand y UpdateCommand, que son casos especiales de eventos reenviados.

En el caso de los botones, se puede utilizar la propiedad CommandArgument para pasar una cadena especificada por el usuario al controlador de eventos, con el fin de ayudar a identificar el botón que ha provocado el evento. Por ejemplo, en un control DataList, los botones provocan el evento ItemCommand. Se puede establecer la propiedad CommandArgument de cada botón en un valor distinto (por ejemplo, el valor de un botón puede ser "ShowDetails" y "AddToShoppingCart" el de otro), y más adelante capturar dichos valores en el controlador de eventos.

Un evento es un mensaje parecido a "se ha hecho clic en un botón". En una aplicación, se debe traducir el mensaje en una llamada a un método del código. El enlace entre el mensaje del evento y un método específico (es decir, un controlador de evento) se lleva a cabo utilizando un delegado de eventos. Para obtener más información, vea Eventos y delegados.

En las páginas Web ASP.NET, no es necesario codificar explícitamente delegados si el control se crea mediante declaración (en el marcado) en la página. El enlace de eventos se puede lograr de distintas maneras, dependiendo del evento que se enlace y de qué lenguaje de programación se esté utilizando. Para obtener información detallada, vea Cómo: Crear controladores de eventos en páginas web ASP.NET.

Enlazar eventos de control

Para controles declarados en la página, se puede enlazar un evento a un método estableciendo un atributo (propiedad) en el marcado del control. El ejemplo de código siguiente muestra cómo enlazar el evento Click de un control ASP.NET Button a un método denominado ButtonClick.

<asp:button id="SampleButton" runat="server" 
   text="Submit" onclick="ButtonClick" />

Al compilar la página, ASP.NET busca un método denominado ButtonClick y confirma que éste tiene la firma adecuada (acepta dos argumentos, uno de tipo Object y otro de tipo EventArgs). A continuación, ASP.NET enlaza automáticamente el evento al método.

En Visual Basic, también se pueden enlazar los eventos a los métodos utilizando la palabra clave Handles en la declaración del controlador de eventos, como en el ejemplo de código siguiente:

Private Sub ButtonClick(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles SampleButton.Click

Enlazar eventos de página

Las páginas ASP.NET provocan eventos de ciclos de vida como Init, Load, PreRender y otros. De manera predeterminada, los eventos de página se pueden enlazar a los métodos utilizando la convención de nomenclatura Page_nombreDeEvento. Por ejemplo, con el fin de crear un controlador para el evento Load de la página, se puede crear un método denominado Page_Load. En tiempo de ejecución, ASP.NET buscará los métodos que se basen en esta convención de nomenclatura y realizará el enlace automáticamente entre el evento y el método. Se puede utilizar la convención Page_nombreDeEvento para cualquier evento expuesto por la clase Page.

NotaNota

Los métodos de control de eventos de página no requieren ningún argumento.

Si lo prefiere, puede enlazar explícitamente los controladores a los eventos. Una propiedad de página denominada AutoEventWireup controla el enlace automático de los eventos de página en función de la convención de nomenclatura del método. De manera predeterminada, para C#, esta propiedad se establece en true y ASP.NET realiza la búsqueda automática y el enlace descritos anteriormente. También se puede establecer esta propiedad en false agregando el atributo AutoEventWireup=false de la directiva @ Page. A continuación se pueden crear los métodos con cualquier nombre y enlazarlos a los eventos de páginas explícitamente.

De forma predeterminada, para Visual Basic, esta propiedad está establecida en false. En Visual Basic, los controladores se enlazan a los eventos mediante la palabra clave Handles. Visual Studio inserta automáticamente esta palabra clave como parte del método que se crea al seleccionar un evento de página en el cuadro desplegable. En el ejemplo siguiente, se muestra cómo usar la palabra clave Handles:

Sub MyPageLoad(sender As Object, e As EventArgs) Handles MyBase.Load

Una desventaja del atributo AutoEventWireup es que precisa que los controladores de eventos de la página tengan nombres específicos y predecibles. Esto limita su flexibilidad en cuanto al modo de denominar los controladores de eventos. Otra desventaja es el efecto negativo sobre el rendimiento porque ASP.NET busca los métodos en tiempo de ejecución. Para un sitio web con un gran volumen de tráfico, este impacto podría ser significativo.

NotaNota

Si incluye enlaces explícitos para los eventos de página, asegúrese de que la propiedad AutoEventWireup esté establecida en false para que no se llame dos veces al método.

Enlace explícito para controles dinámicos

Si crea controles declarándolos en el marcado, puede enlazar eventos con métodos mediante un atributo (por ejemplo, onclick) o, en Visual Basic, con la palabra clave Handles. Si los controles se crean dinámicamente (en código), no se puede utilizar ninguno de estos métodos, porque el compilador no tiene una referencia al control en tiempo de compilación.

En ese caso, se debe utilizar el enlace de eventos explícito. En Visual Basic, puede utilizar la instrucción AddHandler para enlazar a un método existente un evento creado dinámicamente en un control. En C#, se crea un delegado y se asocia al evento de control. El ejemplo de código siguiente muestra cómo se puede enlazar un método denominado ButtonClick al evento Click de un botón:

Button b = new Button;
b.Text = "Click";
b.Click += new System.EventHandler(ButtonClick);
Placeholder1.Controls.Add(b);

En este tema se explica cómo trabajar con eventos generados en el código de servidor. Los controles representan los elementos para el explorador y esos elementos también pueden provocar eventos de cliente que se pueden controlar en los scripts de cliente. Mediante el uso de scripts de cliente, se puede agregar la capacidad de control de eventos de mouse y de teclado a los controles de servidor ASP.NET. Para obtener más información, vea Scripts de cliente en páginas Web ASP.NET y Cómo: Agregar eventos de script de cliente a los controles de servidor web ASP.NET.

Aparte de los eventos de página y de control, ASP.NET proporciona formas de trabajar con eventos de ciclo de vida que pueden provocarse al iniciarse o detenerse la aplicación, o cuando la sesión de usuario de un individuo determinado se inicia o se detiene, incluido lo siguiente:

  • Los eventos de aplicación se provocan para todas las solicitudes que se hacen a una aplicación. Por ejemplo, el evento BeginRequest del objeto HttpApplication (Application_BeginRequest)) se genera cuando se solicita cualquier página Web ASP.NET o servicio Web XML en una aplicación. Este evento le permite inicializar recursos que se utilizarán para cada solicitud a la aplicación. Un evento correspondiente, el evento EndRequest del objeto HttpApplication (Application_EndRequest), le proporciona la oportunidad de cerrar o eliminar los recursos utilizados por la solicitud.

  • Los eventos de sesión son similares a los de aplicación (existen los eventos Start y un evento End), pero se producen con cada sesión única dentro de la aplicación. Una sesión comienza cuando un usuario solicita una página por primera vez desde la aplicación y termina cuando la aplicación cierra explícitamente la sesión o cuando la sesión excede el tiempo de espera.

    NotaNota

    El evento Session_End no se provoca en todas las circunstancias. Para obtener información detallada, vea End.

Se pueden crear controladores para estos tipos de eventos en el archivo Global.asax. Para obtener información detallada, vea Información general sobre el ciclo de vida de una aplicación ASP.NET para IIS 5.0 y 6.0 y Sintaxis de Global.asax.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft