Cómo actualizar FormView a través de CallBack, espero brindar ejemplos.
/china/msdn/library/webservices/asp.net/us0501CuttingEdge.mspx?mfr=true
Principios básicos del control de devoluciones de llamadas de scripts
ASP.NET El mecanismo de devolución de llamada del script consta de dos elementos clave: código del lado del servidor que responde a las acciones del usuario y código del lado del cliente que maneja eventos del lado del servidor. En cuanto a la devolución de llamada de la página en sí, como describí en el artículo que mencioné anteriormente, puede adjuntar algún código de script generado por ASP.NET al botón de la página que realiza la devolución de llamada, que es invisible para el usuario. Dado que la solicitud se dirige a la página actual, la página publicará la información en sí misma, de forma similar al comportamiento en un evento de devolución de datos normal, excepto que el ciclo de vida de la página se acorta. Las páginas deben implementar la interfaz ICallbackEventHandler para poder llamar a métodos con firmas predefinidas para producir resultados para el cliente.
Entonces, ¿cuál es la diferencia cuando el control activa una llamada fuera de banda? En este caso, la URL de destino para la devolución de llamada "invisible" es la URL de la página que aloja el control de llamada, que debe implementar ICallbackEventHandler para proporcionar un método que produzca un resultado específico para el cliente. Asimismo, el control es responsable de insertar cualquier código JavaScript necesario para procesar los resultados y actualizar la página de host.
Un control con función de devolución de llamada es solo un control que implementa las interfaces ICallbackContainer e ICallbackEventHandler, cada una de las cuales tiene un método. Los métodos de la interfaz ICallbackContainer devuelven el código de script que desencadenó la llamada remota; la interfaz ICallbackEventHandler proporciona código del lado del servidor que se ejecuta durante la llamada. ICallbackEventHandler también es una interfaz que deben utilizar las páginas con funciones de devolución de llamada. La declaración de un control personalizado de muestra que implementa la interfaz de devolución de llamada es la siguiente:
clase pública CallbackValidator: WebControl,
INamingContainer, ICallbackContainer.ICallbackEventHandler
In When Al implementar la interfaz ICallbackContainer, es posible que necesite llamar al método GetCallbackEventReference de la página para obtener la llamada JavaScript adecuada que desencadena el evento del servidor. Entraré en más detalles sobre esto más adelante.
Volver al principio de la página
Control CallbackValidator
Para comprender el control del servidor con función de devolución de llamada, veamos un ASP.NET personalizado función de devolución de llamada de script Ejemplo de control de validador. En ASP.NET, los controles de validación se utilizan para verificar y validar la entrada en los campos de formulario definidos en una página web. Validator es un control de servidor que hereda de la clase BaseValidator, que a su vez hereda de Label.
Cada control de validación hace referencia a un control de entrada ubicado en otra parte de la página. Cuando se debe enviar la página, el contenido de los controles del servidor monitoreado se pasa a este validador para su posterior procesamiento. Cada validador realiza un tipo diferente de validación. Por ejemplo, el control CompareValidator compara la entrada del usuario con un valor fijo utilizando operadores de comparación como menor, igual o mayor que, RangeValidator garantiza que la entrada del usuario esté dentro de un rango específico, y RegularExpressionValidator solo evalúa la entrada del usuario si coincide. un patrón definido por una expresión regular verificarlo.
RangeValidator garantiza que la entrada del usuario esté dentro de un rango específico, mientras que RegularExpressionValidator solo valida la entrada del usuario si coincide con un patrón definido por una expresión regular.
Normalmente, la verificación se produce en el servidor. Sin embargo, ASP.NET también proporciona implementaciones completas del lado del cliente para la mayoría de los controles de validación y le permite escribir scripts personalizados del lado del cliente para los controles de validación restantes. Esto permite que los navegadores compatibles con DHTML (como Microsoft Internet Explorer 4.0 y posteriores) realicen la validación en el lado del cliente inmediatamente cuando el usuario hace clic o escribe fuera de un campo de entrada monitoreado. En muchos casos, la validación del lado del cliente es lo suficientemente potente como para detectar muchos errores importantes y notificar al usuario. Por ejemplo, el control RequiredFieldValidator puede verificar que un campo determinado no puede ser nulo. El valor actual se puede verificar sin enviarlo de vuelta al servidor.
Si la validación del lado del cliente está activada, la página no se devolverá hasta que todos los campos de entrada contengan datos válidos. Para ejecutar código seguro y protegerse contra ataques maliciosos y encubiertos, aún debe validar los datos en el servidor. La validación del lado del servidor siempre la realiza un control de validación, incluso si la validación del lado del cliente se realizará simultáneamente. Además, no todos los tipos de validación se pueden realizar en el lado del cliente. De hecho, si se requiere validación con la base de datos, no hay otra forma que enviarla de regreso al servidor. Ese es el problema.
Las devoluciones de datos periódicas involucran toda la página. Cargue el estado de vista completo, procese la página completa, genere, descargue y presente la misma respuesta grande. ¿No sería mejor si pudiera realizar una solicitud fuera de banda optimizada al servidor y simplemente verificar el estado del control bajo validación?
En ASP.NET, no existe tal control. Entonces, escribamos un control como este, lo llamaré CallbackValidator, es un control ASP.NET 2.0 personalizado que creé para demostrar cómo el control realiza llamadas fuera de banda a la página de alojamiento y maneja los eventos en el servidor.
Cuando comencé a trabajar en este proyecto, no era tan ambicioso: mi objetivo original era modificar el control estándar CustomValidator. En este registro, el control CustomValidator utiliza lógica de validación definida mediante programación para verificar la validez de la entrada del usuario. La intención original del control Callback Validator era proporcionar una forma de realizar la validación del lado del servidor sin realizar una devolución de datos de toda la página. Me di cuenta de que sin ningún esfuerzo adicional podía tener un control personalizado similar a un botón que pudiera validar múltiples campos de entrada en el servidor sin devolver toda la página. Este comportamiento es exactamente de lo que se trata el control CallbackValidator.
Antes de entrar en el meollo del control, echemos un vistazo a la Figura 1, donde el botón de envío de la página simplemente publica todos los valores en el servidor de la forma normal. Efectivamente, los valores se procesarán en el lado del cliente y, si es necesario pasar todos los valores, el control los pasará al servidor, donde todas las entradas de control se validarán utilizando el código de validación del lado del servidor (si corresponde). ). Cuando regrese sabrás qué valores han sido validados por el servidor. Por ejemplo, en la Figura 1, sabrá si la ID de usuario ha sido verificada antes de intentar enviar el resto de los datos.
Figura 1 Formulario de entrada con validación de devolución de llamada
La Figura 2 muestra el código fuente de esta página. Como puede ver, contiene un formulario de servidor HTML, algunos cuadros de texto (cada uno vinculado a un control de validación estándar) y una instancia de un control CallbackValidator personalizado. En realidad, este control es responsable de crear y mostrar el botón de validación.
Volver al inicio
Cómo funciona este control
El control CallbackValidator hereda de WebControl e implementa la interfaz INamingContainer. Además, implementa las interfaces ICallbackContainer e ICallbackEventHandler para admitir devoluciones de llamadas.
La interfaz ICallbackContainer requiere un método GetCallbackScript declarado de la siguiente manera:
cadena GetCallbackScript(IButtonControl buttonControl, argumento de cadena)
GetCallbackScript recibe dos parámetros. El primer parámetro es una referencia al control de página que se espera que active la devolución de llamada. El segundo parámetro (una cadena) representa cualquier contexto que la persona que llama desea pasar al método para ayudar a construir la salida. Como puede ver por el nombre, el método GetCallbackScript utiliza una llamada de función JavaScript para preparar y devolver una cadena y adjuntarla al control de botón especificado para activar la llamada remota.
Los parámetros de control del botón le permiten especificar exactamente a qué botón en la interfaz de usuario de control desea realizar una llamada de JavaScript. Ejemplo El control CallbackValidator tiene solo un botón en el que se puede hacer clic; el control GridView tiene muchos botones en los que se puede hacer clic, cada uno de los cuales se puede utilizar como botón de navegación o de vínculo en el encabezado. En ASP.NET 2.0, todos los controles que actúan como botones en un formulario deben implementar una nueva interfaz, IButtonControl, como se muestra en la Figura 3, que se implementa mediante los siguientes controles web: Button, LinkButton e ImageButton. HTML El control del botón HTML no implementa esta interfaz. Tenga en cuenta que en Microsoft .NET Framework 1.x, la interfaz IButtonControl sólo existía en los controles de botones de Windows Forms (aunque el conjunto de miembros era bastante diferente).
La segunda interfaz requerida por los controles con capacidades de devolución de llamada es ICallbackEventHandler, que también es requerida por las páginas que admiten devoluciones de llamada de script. Esta interfaz contiene un método:
string RaiseCallbackEvent(string eventArgument)
Este método recibe el valor de entrada como una cadena, realiza algún trabajo del lado del servidor y devuelve la respuesta como una cadena. . El punto importante aquí es que tanto los datos de entrada como los de salida se pueden empaquetar y pasar como cadenas, depende del criterio del codificador qué son exactamente las cadenas y cómo están formateadas.
Antes de analizar la implementación del control CallbackValidator, echemos un vistazo a la Figura 4, que ilustra cómo el control coincide con el controlador HTTP que maneja las solicitudes de recursos ASPX en la página. El control CallbackValidator parece un botón con algún código de script adjunto, que es lo que devuelve el método GetCallbackScript. Cuando hace clic en el botón (validar), se activa una devolución de llamada en segundo plano que envía el estado de la vista, el valor de entrada actual y dos cadenas personalizadas llamadas CALLBACKPARAM y CALLBACKID. El primero contiene los valores de entrada al crear RaiseCallbackEvent en el cuerpo del método GetCallbackScript, mientras que CALLBACKID identifica el objeto del lado del servidor que maneja el evento del servidor. Una vez que el controlador HTTP para la página solicitada se extrae del tiempo de ejecución de ASP.NET detrás del servidor, intenta encontrar un control con ese ID que implemente ICallbackEventHandler. Si tiene éxito, llama al método RaiseCallbackEvent del control y devuelve su salida al cliente. Si CALLBACKID apunta a una página, el controlador HTTP verá si la página implementa esa interfaz y continuará de la manera habitual.
Volver al inicio de la página
Construcción del control
CallbackValidator es un control compuesto cuya interfaz de usuario consta de un botón simple.
Puede ampliar fácilmente este aspecto del control agregando algunas propiedades para darle estilo al botón (enlace, pulsación, imagen u otro). El texto que se muestra en el botón lo establece la propiedad ButtonText. Una propiedad de colección llamada ControlsToValidate recopila los ID de todos los validadores de páginas que se probarán en el servidor durante la devolución de llamada. ControlsToValidate.Add("valUserId");
CallbackValidator1.ControlsToValidate.Add("valEmail");
}
Tenga en cuenta que esta clase de colección no retiene su contenido de estado Ver. Por lo tanto, siempre debes reinicializarlo al pasar una solicitud. También tenga en cuenta que debe agregar controles de validación en esta colección, no controles de entrada. Durante una llamada remota, el control CallbackValidator llama al método Validate en el control asociado y almacena la respuesta en la devolución de llamada del cliente.
Como se muestra en la Figura 5, el control CallbackValidator crea un control Button y agrega algo de código a su propiedad OnClientClick. Esta es una nueva propiedad introducida en ASP.NET 2.0 para HTML onclick Agregar llamadas JavaScript a eventos. JavaScript llama al evento HTML onclick. En ASP.NET 2.0, las siguientes dos líneas de código hacen exactamente lo mismo:
button.Attributes["onclick"] = js; // ASP.NET 1.x todavía funciona en 2.0
p>botón.OnClientClick = js; // ASP.NET 2.0