Asp.Net/C#/WCF - ASP.NET ICallbackEventHandler接口

ASP.NET 2.0 Callback 使得ASP.NET Server端控件可以调用服务端的方法而不须要执行一个完整的Postback过程,也就是说使得Server端控件能够很好的支持Ajax
xcode

  Callback不一样于Postback之处在于向服务器发送请求时只有ViewState和用户自定义信息被发送到服务器端,请求完毕后,只返回用户自定义结果,而不会从Render页面。服务器

  GridView控件正是使用了这个技术来实现无刷新的分页及排序功能,那么它是如何实现的哪,咱们又如何在自定义控件中添加该功能哪?本文将会简单地阐述如何使用ASP.NET 2.0 Callback来实现Ajax.异步

1 ICallbackEventHandler 接口ide

  ASP.NET Server端控件能够经过实现ICallbackEventHandler 接口来接受客户端Callback事件。
  ICallbackEventHandler 接口声明:函数

-收缩 C#代码
public  interface ICallbackEventHandler
{
    string GetCallbackResult();
    void RaiseCallbackEvent( string eventArgument);
}

  RaiseCallbackEvent负责处理客户端回调事件,其中方法参数eventArgument是客户端脚本在触发Callback时提供的,该方法将会依赖于eventArgument参数来进行处理。
GetCallbackResult则负责将处理结果做为String返回给客户端脚本。当Callback完成后客户端脚本将会根据获得的处理结果,进行页面局部更新。this

2 CallbackEventReferencespa

  那么怎么样才能注册一段客户端脚原本触发Callback,还须要作些什么哪?code

  ClientScriptManager类用于管理Web页面中的客户端脚本,提供了一系列的方法来注册脚本,而且还能够得到指定客户端脚本函数的引 用。 经过ClientScriptManager类的GetCallbackEventReference方法咱们能够获取一个对客户端函数的引用。当该函数 在客户端被调用时,将启动一次客户端回调。

GetCallbackEventReference方法声明:orm

-收缩 C#代码
public  string GetCallbackEventReference (
    Control control,
     string argument,
     string clientCallback,
     string context,
     string clientErrorCallback,
     bool useAsync
)

  第一个参数指的是实现ICallbackEventHandler接口的服务器端控件;
第二个参数将被传递给在服务器端执行的RaiseCallbackEvent方法,它能够是一个JavaScript函数调用表达式;
第三个参数是一个
JavaScript函数名,在Callback完成后,该函数将被调用,同时服务器函数GetCallbackResult的执行结果也将做为这一个函数的参数;
  
第四个参数是当前执行的Callback的上下文,这个参数也能够是一个JavaScript函数调用表达式;  
第五个参数是一个JavaScript函数名,在Callback执行的过程当中若是有错误产生,该函数将被调用。
第六个参数是一个Bool值来肯定当前Callback应该被同步执行仍是异步执行。server

  获取这个Callback客户端函数的引用以后,咱们能够注册一个新的客户端函数来调用它。而后再客户端就能够经过新注册的函数来进行Callback了。

3.示例

  咱们经过一个简单的例子来剖析ASP.NET 2.0 Callback的整个执行过程:

-收缩 C#代码
public  class MyControl : WebControl, ICallbackEventHandler
     {
          private  const  string Script1 =  "function onCallbackComplete(result){ \n" +
                  "   var element = document.getElementById('%ID%'); \n" +
                  "   if(element != null) \n" +
                  "       element.innerHTML = result;} \n";
 
          private  const  string Script2 =  "function onCallbackError(){ \n" +
                  "   var element = document.getElementById('%ID%'); \n" +
                 "   if(element != null) \n" +
                 "       element.innerHTML = 'error';} \n";

         public  string GetCallbackResult()
        {
             return  "Callback result";
        }

         public  void RaiseCallbackEvent( string eventArgument)
        {
        }

         public  override  void RenderBeginTag(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Onclick,  "DoClientCallBack()");
             base.RenderBeginTag(writer);
            writer.Write( "My Callback control");
        }

         protected  override  void OnPreRender(EventArgs e)
        {
             //Define callback references.
             string callbackRef =  this.Page.ClientScript.GetCallbackEventReference(
                 this"""onCallbackComplete"null"onCallbackError", true);

             // Register script blocks will perform call to the server.
             this.Page.ClientScript.RegisterClientScriptBlock(
                 this.GetType(),  "DoClientCallBack",
                 "function DoClientCallBack() { " + callbackRef +  "} \n", true
            );

             // Register other scripts
             this.Page.ClientScript.RegisterClientScriptBlock(
                 this.GetType(),  "onCallbackComplete"
                Script1.Replace( "%ID%"this.ClientID), true);
             this.Page.ClientScript.RegisterClientScriptBlock(
                 this.GetType(),  "onCallbackError"
                Script2.Replace( "%ID%"this.ClientID), true); 

             base.OnPreRender(e);
        }

  将上面的写好的控件放到一个Page上,在Runtime 当点击该控件的时候便会执行一次Callback,而且更新控件内容。

  执行顺序:

  其中WebForm_DoCallback和WebForm_CallbackComplete是微软JavaScript库中的方法。

  ASP.NET 2.0 Callback提供了一种简单的方法来使得ASP.NET Server段控件能够支持AJAX,其自己能够看做是一种轻量级的Postback。

全文完。

相关文章
相关标签/搜索