Implementando Callbacks de Clientes Através de Programação Sem Postbacks nas Páginas ASP.NET
No modelo padrão para página ASP .NET, o usuário interage com a página e clica em um botão ou executa alguma outra ação que resulta em um postback.A página e seus controles são recriados, o código da página é executado no servidor, e uma nova versão da página é apresentada no navegador.No entanto, em alguma situações, é útil executar o código do servidor em um cliente sem executar um postback.Quando o script de cliente em uma página está mantendo informações de estado (por exemplo, valores de variáveis locais), o estado será destruído se a página for enviada e uma nova cópia for recebida.Adicionalmente, postback de páginas introduzem processamento de código extra que pode reduzir o desempenho e forçar o usuário a esperar a página ser processada e recriada.
Para evitar a perda do estado do cliente e não incorrer um processamento de código extra do servidor, você pode criar um código para uma página Web ASP.NET para que ele possa executar callback de cliente.Em um callback de cliente, uma função do scscripte cliente enviar uma solicitação à uma página Web ASP.NET.A Página Web executa um versão modificada do seu ciclo de vida normal.A página é iniciada e seus controles e outros membros são criados, e então um método marcado especialmente é chamado.O método executa o processo que você codificou e então retorna um valore para o navegador que pode ser lido por outra função do stript de cliente.Através desse processo, a página continua ativa no navegador.
Diversos Controles de servidores Web podem utilizar o callback de clientes.Por exemplo, o controle TreeView usa o callback e cliente para implementar sua funcionalidade populate-on-demand.Para obter mais informações, consulte: Visão geral do Controle do Servidor Web TreeView.
Existem diversas opções para automatizar o callback de clientes em uma página ASP.NET.Recursos AJAX no ASP.NET como o controle de servidor UpdatePanel pode automatizar a atualização assíncrona de página parcial, e o recurso do serviço Web de comunicação pode automatizar o serviço Web de chamadas assíncronas.
Para obter uma visão geral dos recursos do AJAX no ASP.NET que automatizam os retornos de chamada do cliente para você, consulte os seguintes tópicos:
Você também pode escrever seu próprio script de clientes para implementar o callback de clientes diretamente.Esse tópico discute como implementar seu próprio callback de clientes para comunicação assíncrona entre cliente e servidor.
Componentes de Callback de Clientes
Criando uma página ASP.NET que implementar callback de clientes através de programação é similar à criação de qualquer página ASP.NET, com alguma poucas diferenças.O código do servidor da página deve executar as seguinte tarefas:
Implementar a interface ICallbackEventHandler.Você pode adicionar essa declaração de interface para qualquer página ASP.NET.
Fornecer uma implementação para o método RaiseCallbackEvent.Esse método será chamado para executar um callback no servidor.
Fornecer uma implementação para o método GetCallbackResult.Esse método irá devolver um resultado de callback para o cliente.
Adicionalmente, a página deve conter três funções do script de clientes que executam as seguintes ações:
Uma função chama um método de ajudar que executa a solicitação atual para o servidor.Nessa função, você pode executar lógica personalizada para preparar os argumentos do evento previamente.Você pode mandar um cadeia de caracteres como parâmetro para o manipulador de eventos de callback do lado servidor.
Outra função recebe (é chamada pelo) o resultado do código do servidor que processou o evento callback, aceitando a cadeia de caracteres que representa o resultado.Esse é referenciada como a função de callback do cliente.
Uma terceira função é uma função de auxílio que executa a solicitação atual para o servidor.Essa função é gerada automaticamente pelo ASP.NET quando você gera uma referência à essa função utilizando o método GetCallbackEventReference no código do servidor.
Tanto o callback como o postback são solicitados para a página de procedência.No entanto, callbacks e postbacks de clientes são gravados nos logs do servidor Web como solicitação da página.
Implementando as Interfaces Necessárias no Código do Servidor
Para executar código do servidor de um script de cliente sem executar postback, você deve implementar algumas interfaces no código do servidor.
Declarando a Interface ICallbackEventHandler
Você pode declarar a interface ICallbackEventHandler como parte da classe de declaração da página.Se você está criando uma página code-behind, você pode declarar a interface utilizando sintaxe como a seguinte.
Partial Class CallBack_DB_aspx
Inherits System.Web.UI.Page
Implements System.Web.UI.ICallbackEventHandler
public partial class CallBack_DB_aspx :
System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
Se você está trabalhando em um página de arquivo único, você pode adicionar a declaração utilizando a diretiva @ Implements na página, como os exemplos seguintes:
<%@ Page Language="VB" %>
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
<%@ Page Language="C#" %>
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
Observação: |
---|
O nome da interface diferencia maiúsculas de minúsculas. |
Criando um Método de Callback do Servidor
No código do servidor, você deve criar um método que implementa o método RaiseCallbackEvent e um outro método que implementa GetCallbackResult.O método RaiseCallbackEvent recebe uma única cadeia de caracteres como argumento ao invés de dois argumento que são tipicamente utilizados por manipuladores de evento.Uma porção do método pode ser como exemplo seguinte:
Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _
Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
End Sub
public void RaiseCallbackEvent(String eventArgument)
{
}
O método GetCallbackResult não recebe qualquer argumento e retorna uma cadeia de caracteres.Uma porção do método pode ser como exemplo seguinte:
Public Function GetCallbackResult() As String Implements _
System.Web.UI.ICallbackEventHandler.GetCallbackResult
Return aStringValue
End Function
public string GetCallbackResult()
{
return aStringValue;
}
Criando Funções de Script de Clientes
Você deve adicionar funções de script de cliente para a página para executar duas funções: enviar o retorno de chamada para a página de servidor e receber os resultados.Ambas as funções do script de clientes são escritas em ECMAScript (JavaScript).
Enviando o Callback
A função para enviar o callback é gerado no código do servidor.O callback atual é executado por uma função da biblioteca que está disponível para qualquer página que implementa a interface ICallbackEventHandler.Você pode obter uma referência à função da biblioteca chamando o método GetCallbackEventReference da página, que é acessível através da propriedade ClientScript da página.Você então cria uma função de cliente dinamicamente, que inclui uma chamado para o valore de resposta do método GetCallbackEventReference.Você passa à esse método uma referência à página (this em C# ou Me no Visual Basic), o nome do argumento que você utilizará para passar o dado, nome da função do script de cliente que receberá os dados do callback, e um argumento que passa qualquer contexto que você desejar.
Depois de criada a função, você a coloca na página chamando o método RegisterClientScriptBlock.
O seguinte exemplo mostra como criar um função dinamicamente chamada CallServer que invoca o callback.
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim cm As ClientScriptManager = Page.ClientScript
Dim cbReference As String
cbReference = cm.GetCallbackEventReference(Me, "arg", _
"ReceiveServerData", "")
Dim callbackScript As String = ""
callbackScript &= "function CallServer(arg, context)" & _
"{" & cbReference & "; }"
cm.RegisterClientScriptBlock(Me.GetType(), _
"CallServer", callbackScript, True)End Sub
void Page_Load(object sender, EventArgs e)
{
ClientScriptManager cm = Page.ClientScript;
String cbReference = cm.GetCallbackEventReference(this, "arg",
"ReceiveServerData", "");
String callbackScript = "function CallServer(arg, context) {" +
cbReference + "; }";
cm.RegisterClientScriptBlock(this.GetType(),
"CallServer", callbackScript, true);
}
O nome dos argumento que são aceitados pela função que você está criando deve coincidir com o nome dos valores que você passou para o método GetCallbackEventReference.
O seguinte exemplo mostra algumas marcações que poder ser usadas para invocar o callback e processar o valor retornado:
<input type="button" value="Callback"
onclick="CallServer(1, alert('Callback'))"/>
<br />
<span id="Message"></span>
<input type="button" value="Callback"
onclick="CallServer(1, alert('Callback'))"/>
<br />
<span id="Message"></span>
Recebendo um Callback
você pode escrever uma função de cliente que receber o callback estaticamente na página.A função deve ser nomeado para coincidir com o nome que você passou na chamada ao método GetCallbackEventReference.A função de recebimento aceita dois valores de seqüência de caracteres: uma para o valor retornado e um segundo valor opcional para o valor de contexto é passado de volta do servidor.
A função pode se parecer com o seguinte exemplo:
<script type="text/javascript">
function ReceiveServerData(arg, context)
{
Message.innerText = 'Processed callback.';
}
</script>
Consulte também
Conceitos
Exemplo de Implementação (Visual Basic) da Chamada de Retorno do Cliente
Exemplo de implementação (C#) callback de cliente