O retorno de chamada sem atualização defendido pela tecnologia AJAX requer a gravação de uma grande quantidade de código JavaScript ou o uso de algumas estruturas AJAX na tecnologia original, o que reduz bastante a eficiência e a capacidade de manutenção do desenvolvimento. Na verdade, o ASP.NET2.0 já fornece essa interface, que é ICallbackEventHandler.
Já existem muitos artigos sobre ICallbackEventHandler na Internet, e este artigo realmente acrescenta mais à história.
ICallbackEventHandler existe em System.Web.UI. Vamos experimentar com um exemplo muito simples.
O primeiro passo é criar uma nova janela WEB no VS2005.
O segundo passo é colocar um trecho de código HTML (abaixo) em ASPX:
1<corpo>
2 <form id="form1" runat="servidor">
3 <div>
4 <button onclick="CallServer()">CallServer</button>
5</div>
6 </form>
7</body>
O terceiro passo é colocar um script JavaScript em <HEAD></HEAD>:
1 <script type="text/javascript">
2 funções CallServer()
3 {
4 var produto = "teste";
5 <%= ClientScript.GetCallbackEventReference(this, "produto", "ReceiveServerData",null)%>;
6}
7
8 funçãoReceiveServerData(rValue)
9 {
10 alerta(rValor);
11}
12 </script>
A quarta etapa é herdar a interface ICallbackEventHandler no código CS de segundo plano do ASPX e implementar os dois métodos na interface:
ICallbackEventHandler.GetCallbackResult()
e
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
O quinto passo é adicionar uma variável CallBackValue e modificar os dois métodos da interface como:
1 string privada CallBackValue = string.Empty;
2
3 strings ICallbackEventHandler.GetCallbackResult()
4 {
5 return CallBackValue + ",ok";
6}
7
8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
9 {
10 this.CallBackValue = eventArgument;
11}
12
A sexta etapa é a execução. Um botão aparecerá na interface. Após clicar, a string "Test" será transmitida para o background. O código C# de fundo adicionará ", OK" à string e a retornará ao JavaScript do cliente. código e exibi-lo.
Seguindo as seis etapas acima, você pode obter retorno de chamada sem atualização. Agora, vamos analisar alguns trechos de código.
Vejamos primeiro o código JavaScript na terceira etapa. Há um retorno de chamada no método CallServer().
<%= ClientScript.GetCallbackEventReference(this, "produto", "ReceiveServerData",null)%>;
O segundo parâmetro entre os quatro parâmetros especifica que a variável string no JavaScript do produto é retornada para segundo plano, e o terceiro parâmetro especifica o método JavaScript ReceiveServerData(string Value) que recebe as informações de retorno ao retornar do segundo plano.
Na quinta etapa, existem dois métodos em segundo plano. Um, ICallbackEventHandler.RaiseCallbackEvent (string eventArgument), é usado para receber a variável string passada no JavaScript em primeiro plano e atribuí-la à variável interna this.CallBackValue. ICallbackEventHandler.GetCallbackResult(), irá alterar a variável interna this.CallBackValue é retornada para o método JavaScript de primeiro plano ReceiveServerData (string Value).
A sequência de chamada é: (frontend)CallServer() --> (backend)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (backend)ICallbackEventHandler.GetCallbackResult() --> (frontend)ReceiveServerData(string Value).
Todo o processo de chamada é muito simples e a etapa mais crítica é a terceira etapa
<%= ClientScript.GetCallbackEventReference(this, "produto", "ReceiveServerData",null)%>;
Para este método, segue uma informação encontrada na Internet, você pode dar uma olhada.
GetCallbackEventReference faz com que o método do cliente seja reciclado no final da solicitação do cliente. Também permite que o CallBackManager determine qual método de retorno de chamada gerar. O método sobrecarregado usado neste exemplo é:
public string GetCallbackEventReference(
destino de string, argumento de string,
string clientCallback, string contexto,
string clientErrorCallback)
Tabela 1. Descrições de parâmetros para o método GetCallBackEventReference.
Parâmetros Descrição ID de destino da página onde a invocação de retorno de chamada é tratada. Para mais informações, consulte as outras opções sobrecarregadas disponíveis na próxima seção imediata. Em nosso exemplo, "this" é o valor do argumento, já que o retorno de chamada é tratado na mesma página. é a definição do parâmetro usada para enviar o valor ao servidor. Este valor é recebido pelo parâmetro "eventArgument" no final do servidor usando o evento RaiseCallbackEvent. "arg" se torna o primeiro nome do parâmetro em nossa amostra. o cliente. clientCallback Nome do método do retorno de chamada invocado após uma chamada bem-sucedida do servidor. "CallBackHandler" é o nome do método que trata o retorno de chamada. Um parâmetro que está associado ao "argumento" do cliente. identifique o contexto da chamada. Você entenderá isso melhor a partir da implementação de amostra. Na amostra "ctx" é apenas outra definição de parâmetro usada. CallBackManager em caso de erros.
A string retornada deste método é:
__doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)
Outro método sobrecarregado é:
public string GetCallbackEventReference(
Controle de controle, argumento de string,
string clientCallback, string contexto)
string pública GetCallbackEventReference(
Controle de controle, argumento de string,
string clientCallback, string contexto,
string clientErrorCallback)