Se ha lanzado
la devolución de llamada del propio cliente de Asp.Net 2.0.
Asp.Net 2.0.2.0 tiene muchas características nuevas y las devoluciones de llamadas de los clientes son una de ellas. Las devoluciones de llamada del cliente nos permiten llamar a métodos del lado del servidor sin devoluciones de datos. Son consistentes con las funciones proporcionadas por AJAX, pero no son tan flexibles como AJAX puede personalizar los métodos de llamada, pero la función de devolución de llamada que viene con 2.0 no. Para utilizar la función de devolución de llamada del cliente, debe implementar la interfaz system.Web.UI.IcallbackEventHandler.
Esta interfaz contiene dos métodos
// Este método siempre se llama cuando el cliente vuelve a llamar
público vacío RaiseCallbackEvent (String eventArgument)
// Este método se llamará después de ejecutar RaiseCallbackEvent. El valor de retorno de este método se enviará de vuelta al cliente.
cadena pública GetCallbackResult()
ejemplo:
.cs:
Cadena cbReference = Page.ClientScript.GetCallbackEventReference(
this,"arg", "ReceiveServerData", "contexto");
Devolución de llamada de cadenaScript;
callbackScript = "función CallServer(arg, contexto)" + "{ " + cbReference + "} ;";
Página.ClientScript.RegisterClientScriptBlock(
this.GetType(),"CallServer", callbackScript, verdadero);
javascript:
Introducción a AJAX
AJAX no es una tecnología nueva, sino una combinación orgánica de algunas tecnologías existentes, incluidas: XmlHttp, Reflect. Un marco AJAX básicamente incluye: un HttpHandler personalizado y un fragmento de código JavaScript.
Mecanismo operativo AJAX
En el pasado, cuando usábamos XmlHttp para implementar una página sin actualización, usábamos , la diferencia es que el HttpHandler de esta página lo implementamos nosotros mismos.
Construya su propio AJAX:
1. Primero necesitamos implementar un controlador Http (HttpHandler) para responder a las solicitudes de los clientes:
Para implementar un HttpHandler personalizado, necesita implementar la interfaz IHttpHandler.
La interfaz contiene una propiedad y un método:
bool IHttpHandler.IsReusable
anular IHttpHandler.ProcessRequest (contexto HttpContext)
Ejemplo:
bool IHttpHandler.IsReusable
{
obtener {regresar verdadero}
}
anular IHttpHandler.ProcessRequest (contexto HttpContext)
{
context.Response.Clear(); //Obtiene el método a llamar
cadena nombre del método = contexto.Request.QueryString["yo"];
//Obtener información del ensamblado.
//Czhenq.AJAX.Class1.Dencode es un método de codificación de cadenas personalizado
cadena NombreEnsamblaje = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString["as"]);
//Obtener parámetros del método
string Arguments = context.Request.QueryString["ar"] //Comienza a llamar al método
Tipo tipo = Type.GetType(AssemblyName);
Método MethodInfo = tipo.GetMethod(nombremétodo,
BindingFlags.NonPublic | BindingFlags.Público | BindingFlags.Static |
si (método! = nulo)
{
//Los parámetros están separados por ","
cadena[] args = Argumentos.Split(",".ToCharArray());
ParameterInfo[] paras = método.GetParameters();
objeto[] argumento = nuevo objeto[paras.Longitud];
para (int i = 0; i < argumento.Longitud; i++)
{
si (i < args.Longitud) {
//Debido a que todos los parámetros pasados por XmlHttp son de tipo String, deben convertirse
//Aquí solo convertimos los parámetros a Int32, no se hacen otras consideraciones.
argumento[i] = Convert.ToInt32(args[i]);
}
}
valor del objeto = método.Invoke(Activador.CreateInstance(tipo, verdadero), argumento);
si (valor! = nulo) contexto.Response.Write(valor.ToString());
else contexto.Response.Write("error");
}
//Fin del procesamiento
contexto.Respuesta.End();
Bienvenido al foro de la comunidad .NET e interactúe con 2 millones de personal técnico >> Ingrese
2. Código Javascript del cliente:
función CallMethod(AssemblyName,MethodName,Argus)
{
var argumentos = "";
para(var i=0;i
argumentos += Argus[i] + ",";
if(args.length>0) args = args.substr(0,args.length-1);
var xmlhttp = nuevo ActiveXObject('Microsoft.XMLHTTP');
url = "AJAX/AJAX.czhenq?as=" + Nombre del ensamblaje + "&me=" + Nombre del método +"&ar="+ args;
xmlhttp.open("POST",url,falso);
xmlhttp.send();
alerta(xmlhttp.responseText);
}
3. Se ha implementado un marco AJAX simple. Ahora escriba un fragmento de código para probar.
Utilice su propio AJAX
1. Cree un nuevo sitio web y utilice el HttpHandler que acaba de escribir. Y registre su HttpHandler en Web.config del sitio web, indicando que esas solicitudes se procesarán utilizando el controlador que escribió. El siguiente contenido explica: Todas las solicitudes que terminan en "czq" se procesarán utilizando "Czhenq.HttpHandlerFactory".
type="Czhenq.HttpHandlerFactory, Czhenq.AJAX"/>
2. Agregue una página web, copie el script que acaba de hacer en la página y agregue el método que desee llamar.
cadena privada Agregar (int i, int j)
{
devolver TextBox1.Text;
}
3. Coloque un control HiddenField en la página y asígnele el nombre AssemblyName. Y agregue el siguiente código en Page_Load:
cadena nombreEnsamblaje = Czhenq.AJAX.Class1.Encode(
typeof(_Default).AssemblyQualifiedName);
NombreEnsamblaje.Value = NombreEnsamblaje;
var nombreEnsamblaje = document.getElementById("NombreEnsamblaje"); var argus = new Array();argus.push("100");argus.push("200");CallMethod(nombreEnsamblaje,"Agregar",argus)
En resumen, AJAX no es una tecnología nueva. Es solo una combinación orgánica de algunas tecnologías existentes. Simplemente podemos entender AJAX como: AjAx es una encapsulación de JavaScript que llama a XmlHttp.
Se adjunta la implementación de Encode y Dencode:
cadena estática pública Encode (valor de cadena)
{
byte[] bytes = ASCIIEncoding.ASCII.GetBytes(valor);
devolver Convert.ToBase64String(bytes);
}
cadena estática pública Dencode (valor de cadena)
{
byte[] bytes = Convert.FromBase64String(valor);
devolver ASCIIEncoding.ASCII.GetString(bytes);
}