La devolución de llamada sin actualización defendida por la tecnología AJAX requiere escribir una gran cantidad de código JavaScript o utilizar algunos marcos AJAX en la tecnología original, lo que reduce en gran medida la eficiencia del desarrollo y la capacidad de mantenimiento. De hecho, ASP.NET2.0 ya proporciona dicha interfaz, que es ICallbackEventHandler.
Ya hay muchos artículos sobre ICallbackEventHandler en Internet, y este artículo realmente agrega más a la historia.
ICallbackEventHandler existe en System.Web.UI. Probémoslo con un ejemplo muy simple.
El primer paso es crear una nueva ventana WEB en VS2005.
El segundo paso es poner un fragmento de código HTML (a continuación) en ASPX:
1<cuerpo>
2 <formulario id="form1" runat="servidor">
3 <div>
4 <botón onclick="Servidor de llamadas()">Servidor de llamadas</botón>
5 </div>
6 </formulario>
7</body>
El tercer paso es poner un script JavaScript en <HEAD></HEAD>:
1 <tipo de script="texto/javascript">
2 funciones CallServer()
3 {
4 var producto = "prueba";
5 <%= ClientScript.GetCallbackEventReference(this, "producto", "ReceiveServerData",null)%>;
6}
7
8 funcionesReceiveServerData(rValue)
9 {
10 alerta (rValor);
11 }
12 </script>
El cuarto paso es heredar la interfaz ICallbackEventHandler en el código CS de fondo de ASPX e implementar los dos métodos en la interfaz:
ICallbackEventHandler.GetCallbackResult()
y
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
El quinto paso es agregar una variable CallBackValue y modificar los dos métodos de la interfaz como:
1 cadena privada CallBackValue = string.Empty;
2
3 cadenas ICallbackEventHandler.GetCallbackResult()
4 {
5 devuelve CallBackValue + ",ok";
6}
7
8 anular ICallbackEventHandler.RaiseCallbackEvent (cadena eventArgument)
9 {
10 this.CallBackValue = eventArgument;
11 }
12
El sexto paso es ejecutar. Aparecerá un botón en la interfaz. Después de hacer clic, la cadena "Prueba" se transmitirá al fondo. El código C# de fondo agregará ", OK" a la cadena y lo devolverá al JavaScript del cliente. código y mostrarlo.
Si sigue los seis pasos anteriores, podrá lograr una devolución de llamada sin necesidad de actualizar. Ahora, analicemos algunos fragmentos de código.
Primero veamos el código JavaScript en el tercer paso. Hay una devolución de llamada en el método CallServer ().
<%= ClientScript.GetCallbackEventReference(this, "producto", "ReceiveServerData",null)%>;
El segundo parámetro entre los cuatro parámetros especifica que la variable de cadena en el producto JavaScript se devuelve al fondo, y el tercer parámetro especifica el método JavaScript ReceiverServerData(valor de cadena) que recibe la información devuelta cuando regresa del fondo.
En el quinto paso, hay dos métodos en segundo plano. Uno, ICallbackEventHandler.RaiseCallbackEvent (string eventArgument), se utiliza para recibir la variable de cadena pasada en JavaScript en primer plano y asignarla a la variable interna this.CallBackValue. ICallbackEventHandler.GetCallbackResult(), cambiará la variable interna this.CallBackValue se devuelve al método JavaScript de primer plano ReceiverServerData (valor de cadena).
La secuencia de llamada es: (frontend)CallServer() --> (backend)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (backend)ICallbackEventHandler.GetCallbackResult() --> (frontend)ReceiveServerData(valor de cadena).
Todo el proceso de llamada es muy simple y el paso más crítico es el tercer paso.
<%= ClientScript.GetCallbackEventReference(this, "producto", "ReceiveServerData",null)%>;
Para este método, la siguiente es información que se encuentra en Internet, puede echarle un vistazo.
GetCallbackEventReference hace que el método del cliente se recicle al final de la solicitud del cliente. También permite que CallBackManager determine qué método de devolución de llamada generar. El método sobrecargado utilizado en este ejemplo es:
cadena pública GetCallbackEventReference(
destino de cadena, argumento de cadena,
cadena clientCallback, contexto de cadena,
cadena clientErrorCallback)
Tabla 1. Descripciones de parámetros para el método GetCallBackEventReference.
Parámetros Descripción ID de destino de la página donde se maneja la invocación de devolución de llamada. Para obtener más información, consulte las otras opciones sobrecargadas disponibles en la siguiente sección inmediata. En nuestro ejemplo, "este" es el valor del argumento, ya que la devolución de llamada se maneja en la misma página. es la definición de parámetro utilizada para enviar valor al servidor. Este valor se recibe mediante el parámetro "eventArgument" en el extremo del servidor mediante el evento RaiseCallbackEvent. "arg" se convierte en el primer nombre de parámetro en nuestro ejemplo. El valor se pasa a través de este argumento. el cliente. clientCallback Nombre del método de la devolución de llamada que se invoca después de una llamada exitosa al servidor. "CallBackHandler" es el nombre del método que maneja la devolución de llamada. contexto Un parámetro que está asociado con el "argumento" del cliente. identifique el contexto de la llamada. Comprenderá esto mejor a partir de la implementación de muestra. En el ejemplo, "ctx" es solo otra definición de parámetro utilizada. El valor para esto se pasa desde el cliente. CallBackManager en caso de cualquier error.
La cadena devuelta por este método es:
__doCallback('__Página',arg,CallBackHandler,ctx, ErrorCallBack)
Otro método sobrecargado es:
cadena pública GetCallbackEventReference(
Control de control, argumento de cadena,
cadena clientCallback, contexto de cadena)
cadena pública GetCallbackEventReference(
Control de control, argumento de cadena,
cadena clientCallback, contexto de cadena,
cadena clientErrorCallback)