O retorno de chamada do próprio cliente do Asp.Net 2.0,
Asp.Net 2.0, foi lançado. 2.0 tem muitos recursos novos e os retornos de chamada do cliente são um deles. Os retornos de chamada do cliente nos permitem chamar métodos do lado do servidor sem postbacks. Eles são consistentes com as funções fornecidas pelo AJAX, mas não são tão flexíveis quanto o AJAX pode personalizar os métodos de chamada, mas a função de retorno de chamada que vem com o 2.0 não. Para usar a função de retorno de chamada do cliente, você deve implementar a interface system.Web.UI.IcallbackEventHandler.
Esta interface contém dois métodos
//Este método é sempre chamado quando o cliente chama de volta
public void RaiseCallbackEvent(String eventArgument)
//Este método será chamado após RaiseCallbackEvent ser executado. O valor de retorno deste método será enviado de volta ao cliente
string pública GetCallbackResult()
exemplo:
.cs:
String cbReference = Page.ClientScript.GetCallbackEventReference(
this,"arg", "ReceiveServerData", "contexto");
String callbackScript;
callbackScript = "função CallServer(arg, contexto)" + "{ " + cbReference + "} ;";
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),"CallServer", callbackScript, true);
javascript:
Introdução ao AJAX
AJAX não é uma tecnologia nova, mas uma combinação orgânica de algumas tecnologias existentes, incluindo: XmlHttp, Reflect. Uma estrutura AJAX inclui basicamente: um HttpHandler personalizado e um trecho de código JavaScript.
Mecanismo operacional AJAX
No passado, quando usávamos XmlHttp para implementar uma página sem atualização, usávamos, a diferença é que o HttpHandler desta página é implementado por nós mesmos.
Construa seu próprio AJAX:
1. Primeiro precisamos implementar um manipulador Http (HttpHandler) para responder às solicitações do cliente:
Para implementar um HttpHandler personalizado, você precisa implementar a interface IHttpHandler.
A interface contém uma propriedade e um método:
bool IHttpHandler.IsReusable
void IHttpHandler.ProcessRequest (contexto HttpContext)
Exemplo:
bool IHttpHandler.IsReusable
{
obter {retornar verdadeiro};
}
void IHttpHandler.ProcessRequest (contexto HttpContext)
{
context.Response.Clear(); //Obter o método a ser chamado
string nome_método = context.Request.QueryString["me"];
//Obter informações de montagem.
//Czhenq.AJAX.Class1.Dencode é um método de codificação de string personalizado
string AssemblyName = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString["as"]);
//Obtém parâmetros do método
string Argumentos = context.Request.QueryString["ar"] //Começa a chamar o método
Tipo tipo = Type.GetType(AssemblyName);
Método MethodInfo = type.GetMethod(methodName,
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static |
if (método! = nulo)
{
//Os parâmetros são separados por ","
string[] args = Arguments.Split(",".ToCharArray());
ParameterInfo[] paras = método.GetParameters();
objeto[] argumento = novo objeto[paras.Length];
for (int i = 0; i
if (i
//Aqui convertemos apenas os parâmetros para Int32, nenhuma outra consideração é feita.
argumento[i] = Convert.ToInt32(args[i]);
}
}
valor do objeto = método.Invoke(Activator.CreateInstance(type, true), argumento);
if (valor! = nulo) context.Response.Write(value.ToString());
senão context.Response.Write("erro");
}
//Fim do processamento
context.Response.End();
Bem-vindo ao fórum da comunidade .NET e interaja com 2 milhões de funcionários técnicos >> Digite
2. Código Javascript do cliente:
function CallMethod(AssemblyName,MethodName,Argus)
{
var args = "";
para(var i=0;i
args += Argus[i] + ",";
if(args.length>0) args = args.substr(0,args.length-1);
var xmlhttp = novo ActiveXObject('Microsoft.XMLHTTP');
url = "AJAX/AJAX.czhenq?as=" + AssemblyName + "&me=" + MethodName +"&ar="+ args;
xmlhttp.open("POST",url,falso);
xmlhttp.send();
alerta(xmlhttp.responseText);
}
3. Uma estrutura AJAX simples foi implementada. Agora escreva um trecho de código para testar.
Use seu próprio AJAX
1. Crie um novo site e use o HttpHandler que você acabou de escrever. E registre seu HttpHandler no Web.config do site, indicando que essas solicitações serão processadas usando o Handler que você escreveu. O conteúdo a seguir explica: Todas as solicitações que terminam com "czq" serão processadas usando "Czhenq.HttpHandlerFactory".
type="Czhenq.HttpHandlerFactory, Czhenq.AJAX"/>
2. Adicione uma página da web, copie o script agora mesmo para a página e adicione um método que deseja chamar.
string privada Adicionar(int i, int j)
{
retornar TextBox1.Text;
}
3. Coloque um controle HiddenField na página e nomeie-o como AssemblyName. E adicione o seguinte código em Page_Load:
string assemblyName = Czhenq.AJAX.Class1.Encode(
typeof(_Default).AssemblyQualifiedName);
AssemblyName.Value = assemblyName;
var assemblyName = document.getElementById("AssemblyName"); var argus = new Array();argus.push("100");argus.push("200");CallMethod(assemblyName,"Adicionar",argus)
Para resumir, AJAX não é uma tecnologia nova. É apenas uma combinação orgânica de algumas tecnologias existentes. Podemos simplesmente entender AJAX como: AjAx é um encapsulamento de JavaScript chamando XmlHttp.
Em anexo está a implementação de Encode e Dencode:
public static string Encode (string value)
{
byte[] bytes = ASCIIEncoding.ASCII.GetBytes(valor);
retornar Convert.ToBase64String(bytes);
}
string estática pública Dencode (valor da string)
{
byte[] bytes = Convert.FromBase64String(valor);
retornar ASCIIEncoding.ASCII.GetString(bytes);
}