miércoles, 29 de septiembre de 2010

Asynchronous client script callbacks

Para hacer llamadas al servidor sin refrescar la página manejándolo nosotros mismos (otra alternativa es usar AJAX) Ejemplos y tutoriales en
Se puede pasar un string al servidor, y recibir como respuesta otro string

Hay que implementar la interfaz ICallbackEventHandler, con dos métodos
  • Método RaiseCallbackEvent: Es llamado automáticamente cuando se produce un Callback al servidor mediante Script. Se le pasa como parámetro una cadena que se genera en el lado de cliente (en el navegador) antes del envío
  • Método GetCallbackResult: este es el método que se llama automáticamente para devolver los resultados al cliente. Dichos resultados se devuelven en forma de cadena (es el tipo devuelto por el método) y se pasan a una función JavaScript en el cliente. Es decir, en esta cadena podemos meter cualquier cosa en el formato que deseemos: valores separados por comas, XML, JSON, etc
Ejemplo

En la página aspx poner
  • en el HEAD el javascript
<script type ="text/javascript"> function ClientCallbackFunction(arg, ctx) { document.all.txtDesc.value = arg; } </script>
  • en el BODY, en el control que deseamos haga la llamada al servidor

<asp:DropDownList ID="ddlAsync" runat="server" Width="110px" onclick="return DoTheCallback(document.all.ddlAsync.value,0);">
En el codebehind aspx.cs poner
  • Implementar la Interfaz ICallbackEventHandler

public partial class _Default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler

  • En la carga de la página registrar el script DoTheCallBack para la página aspx, que es la función que hará la llamada al servidor, y hará que este RaiseCallbackEvent y devuelva un string al ejecutar GetCallBackResult y dispare ClientCallbackFunction

protected void Page_Load(object sender, EventArgs e) {
string js = Page.ClientScript.GetCallbackEventReference(this, "arg", "ClientCallbackFunction", "ctx", true);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("function DoTheCallback(arg, ctx) {");
sb.Append(js); sb.Append("}");
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "callbackkey", sb.ToString(), true); }

  • Los dos métodos de ICallBackEventHandler
public void RaiseCallbackEvent(String eventArgument) { valor = eventArgument; }
public String GetCallbackResult() { return "El servidor ha devuelto: " valor; }

Pasos de ejecución
  • Primer Load de la página. Se incluye el script en la página web

<script type="text/javascript"> //<![CDATA[ function DoTheCallback(arg, ctx) {WebForm_DoCallback('__Page',arg,ClientCallbackFunction,ctx,null,true)}//]]> </script>

  • Al seleccionar una opción en el control DropDownList se disparan los eventos

    • Script DoTheCallBack envía dato al servidor
    • Método RaiseCallbackEvent lee el dato y lo procesa
    • Método GetCallBackResult devuelve una respuesta al cliente
    • Script ClientCallbackFunction toma la respuesta del servidor

No hay comentarios:

Publicar un comentario