AJAX技术所提倡的无刷新回调,在原来的技术中需要写大量的JavaScript代码或使用一些AJAX框架,使得开发效率和可维护性大大降低。其实ASP.NET2.0中,已经提供了这样的接口,这就是ICallbackEventHandler。
     关于ICallbackEventHandler网上已经有很多文章介绍了,这篇实为画蛇添足。

ICallbackEventHandler存在于System.Web.UI中,我们先做一个非常简单的例子来试用一下。

第一步,在VS2005中建立一个新的WEB窗件。
    第二步,在ASPX中,放上一段HTML代码(如下):

<body><form id="form1" runat="server"><div><button οnclick="CallServer()">CallServer</button></div></form></body>

<body> <form id="form1" runat="server"> <div> <button οnclick="CallServer()">CallServer</button> </div> </form> </body>

第三步,然后在<HEAD></HEAD>中放入一段JavaScript脚本:

<script type="text/javascript">function CallServer(){var product = "测试";<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;}function ReceiveServerData(rValue){alert(rValue);}</script>

第四步,在此ASPX的后台CS代码中,继承ICallbackEventHandler接口,并实现接口中的两个方法:
ICallbackEventHandler.GetCallbackResult()
     和
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)

第五步,增加一个变量CallBackValue,并修改接口的两个方法为:

private string CallBackValue = string.Empty;string ICallbackEventHandler.GetCallbackResult(){return CallBackValue + ",ok";}void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument){this.CallBackValue = eventArgument;}

第六步,运行,界面上会出现一个按钮,点击后,会将“测试”这个字符串传至后台,后台C#代码将字符串加上“,OK”后返回给客户端的JavaScript代码,并显示。

以上六步,就可以实现无刷新回调了。现在,我们来分析一下几段代码。
     先看第三步中的JavaScript代码,其中的CallServer()方法中进行了回调,回调的语句为:

<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;

里面四个参数中第二个参数指定将product这个JavaScript中的字符串变量传回后台,第三个参数指定了从后台返回时接收返回信息的JavaScript方法ReceiveServerData(string Value)。

第五步中后台的两个方法,一个ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)用来接收前台JavaScript中传来的字符串变量,并赋值给内部变量this.CallBackValue,另一个方法ICallbackEventHandler.GetCallbackResult()将变更后的内部变量this.CallBackValue返回给前台JavaScript方法ReceiveServerData(string Value)。

调用的顺序是: (前台)CallServer() --> (后台)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (后台)ICallbackEventHandler.GetCallbackResult() --> (前台)ReceiveServerData(string Value)。

整个调用过程非常简单,而其中非常关键的一步是第三步的
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
这个方法,以下是从网上找来的一段资料,大家可以看看。

GetCallbackEventReference使得客户端方法在客户端请求结束时得到回收。 它也让CallBackManager 确定产生哪种回叫方法。 在这个例子内使用的被重载的方法是:

public string GetCallbackEventReference(string target, string argument,string clientCallback, string  context,string clientErrorCallback)

Table 1. GetCallBackEventReference 方法的参数描述。
Parameters Description target ID of the page where the callback invocation is handled. For more see the other overloaded options available in the next immediate section.In our sample "this" is the argument value, since the callback is handled in the same page.   argument This is the parameter defintion used to send value to the server. This value is received by parameter "eventArgument" at the server end using the RaiseCallbackEvent event."arg" becomes the first parameter name in our sample. The value is passed through this argument from the client. clientCallback Method name of the callback that is invoked after successful server call."CallBackHandler" is the method name that handles the callback.    context A parameter that is associated with the "argument" from the client. It usually should be used to identify the context of the call. You will understand this better from the sample implementation.In the sample "ctx" is just another parameter definition used. The value for this is passed from the client. clientErrorCallback Name of the method that is called from the CallBackManager in case of any errors.
从这个方法返回的string是:

__doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)

另一个重载方法是:

public string GetCallbackEventReference(Control control, string argument,string clientCallback, string  context)public string GetCallbackEventReference(Control control, string argument,string clientCallback,  string  context,string clientErrorCallback)链接:http://www.cnblogs.com/vcool/archive/2008/02/27/1083683.html

转载于:https://www.cnblogs.com/CodingPerfectWorld/archive/2010/11/23/1885133.html

使用ICallbackEventHandler实现无刷新回调相关推荐

  1. 六步使用ICallbackEventHandler实现无刷新回调

    AJAX技术所提倡的无刷新回调,在原来的技术中需要写大量的JavaScript代码或使用一些AJAX框架,使得开发效率和可维护性大大降低.其实ASP.NET2.0中,已经提供了这样的接口,这就是ICa ...

  2. ICallbackEventHandler 前后台无刷新交互

    为什么80%的码农都做不了架构师?>>>    第一步,在VS中建立一个新的WEB窗件. 第二步,在ASPX中,放上一段HTML代码(如下): <body> <fo ...

  3. 社区网站功能实现系列(三):社区页面无刷新回发的一种实现方式

    页面无刷新回发实现有很多种方式,可以用XMLHttpRequest,一些js框架的ajax实现(如jQuery的 ajax),ajaxPro,MS的UpdatePanel,web服务等.下面我来介绍另 ...

  4. ASP.NET 2.0 正式版中无刷新页面(客户端回调)的开发

    在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, ASP.NET2.0 自带的无刷新页面技术没有被很多人 ...

  5. ASP.NET 2.0 正式版中无刷新页面的开发

    ASP.NET 2.0 正式版中无刷新页面的开发 在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, AS ...

  6. 在.NET 2.0正式版中开发无刷新页面

    在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, ASP.NET2.0 自带的无刷新页面技术没有被很多人 ...

  7. Repeater无刷新分页

    网上摘录 前台:  <html xmlns="http://www.w3.org/1999/xhtml">   <head id="Head1" ...

  8. asp.net实现无刷新,无须AJAX

    在.NET 2.0正式版中开发无刷新页面(http://searchwebservices.techtarget.com.cn)2007-05-14 23:42在已经发布的 ASP.NET2.0 中, ...

  9. [转]Oracle分页之三:利用PagerView来实现无刷新GridView

    本文转自:http://www.cnblogs.com/scy251147/archive/2011/04/16/2018355.html 接上面一节,上面还存在问题就是分页控件使用的仍然是服务器端控 ...

  10. ASP.NET2.0 开发无刷新页面

    ASP.NET2. 0  开发无刷新页面 在已经发布的 ASP.NET2. 0  中,越来越多的 Ajax 开发包被开发出来的情况下, ASP.NET2. 0  自带的无刷新页面技术没有被很多人了解, ...

最新文章

  1. OPENCV3读取avi,解决返回NULL问题
  2. python培训学费多少钱-培训python学费多少python学会得多少钱?
  3. SpringBoot集成Redis--配置自定义的RedisCacheManager
  4. java输入流的控制_Java-Android-IO流-控制台输入输出
  5. Apache用户身份验证
  6. spring 注释_Spring@懒惰注释
  7. 过去式加ed的发音_小学英语动词过去式归类总结
  8. 一周消息树:程序员想找好工作?那就学好Linux!
  9. dante pam mysql_FreeBSD下安装dante(sockd)并使用pam-pwdfile进行认证
  10. Android开发笔记(九十八)往图片添加部件
  11. HTTP协议(转自:小坦克博客)
  12. python opcua_理解python中的免费OPC/UA代码
  13. 数学建模之数据比较与影响因素分析
  14. 大话设计模式笔记(二十四)の解释器模式
  15. iOS开发之打包上传到App Store——(一)各种证书的理解
  16. 克隆硬盘后进不去系统_克隆硬盘后进不去系统_如何将硬盘克隆到较小的固态硬盘?...
  17. 矢量网络分析仪是什么?矢量网络分析仪的组成
  18. openstack-Agile Controller-DCN插件安装
  19. 陪玩源码,根据用户需求和功能开发搭建
  20. chrome用 --proxy-server 单独设置代理

热门文章

  1. 深圳大学《计算机论题》作业:伦理分析的一般框架进行案例分析
  2. 模拟器:思科 给路由器配置IP地址和子网掩码
  3. Could not read JSON: Can not deserialize instance of java.lang.String[] out of VALUE_STRING token
  4. 中科大计算机学院直博,对微软亚洲研究院招收直博生与实习生的详细说明
  5. JavaScript判断受访域名,调用不同的js文件
  6. 漏洞复现篇——ewebeditor编辑器解析漏洞
  7. 畅通工程2(prim模拟链表结构体建图+kru)
  8. [题]口袋的天空(连接云朵) —— 标签 #最小生成树(kru) #并查集
  9. Map获取key值和value值
  10. 儿童节html5小游戏,六一儿童节游戏大全,六一儿童节游戏有哪些