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

刷新|无刷新

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

    关于ICallbackEventHandler网上已经有很多文章介绍了,这篇实为画蛇添足。ICallbackEventHandler存在于System.Web.UI中,我们先做一个非常简单的例子来试用一下。

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

1<body>
2    <form id="form1" runat="server">
3    <div>
4        <button >CallServer</button>
5    </div>
6    </form>
7</body>

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

 1 <script type="text/javascript">
 2     function CallServer()
 3     {
 4         var product = "测试";
 5         <%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
 6     }
 7    
 8     function ReceiveServerData(rValue)
 9     {
10         alert(rValue);
11     }
12 </script>

   第四步,在此ASPX的后台CS代码中,继承ICallbackEventHandler接口,并实现接口中的两个方法:

 ICallbackEventHandler.GetCallbackResult() 和 ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)

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

 1 private string CallBackValue = string.Empty;
 2   
 3 string ICallbackEventHandler.GetCallbackResult()
 4 {
 5  return CallBackValue + ",ok";
 6 }
 7
 8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
 9 {
10  this.CallBackValue = eventArgument;
11 }
12

    第六步,运行,界面上会出现一个按钮,点击后,会将“测试”这个字符串传至后台,后台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)

时间: 2024-11-02 03:30:46

六步使用ICallbackEventHandler实现无刷新回调的相关文章

客户端回调实现gridView无刷新分页

分页|客户端|刷新|无刷新 由于客户对速度和性能上的要求越来越变态,而数据量一天天的庞大,因此本人产生了数据的查询和分页完全由客户端回调来实现.想法看上去复杂,实现起来也不难.废话不多说,看程序吧. 一.存储过程 包头: create or replace package H_QUERYPACK is   -- Author  : Evorul  -- Created : 2007-3-29  -- Purpose : 查询机构表    -- Public type declarations 

Asp.Net2.0无刷新客户端回调

asp.net|客户端|刷新|无刷新 Asp.Net2.0的客户端回调是一种很让人激动的方法,他能够让我们控制要提交什么数据给服务器而不用提交整个页面,同时服务器也只返回你所需要的数据而不要发回整个页面. 首先我们要说一个很重要的方法:GetCallbackEventRefernce.我把我的理解写出来,可能是错误的,恳请指出,非常感谢! GetCallbackEventReference 首先实现让客户端脚本有能力传递参数给服务器端的RaiseCallbackEvent方法,然后返回Raise

ASP.NET2.0实现无刷新客户端回调

asp.net|客户端|刷新|无刷新 Asp.Net2.0的客户端回调是一种很让人激动的方法,他能够让我们控制要提交什么数据给服务器而不用提交整个页面,同时服务器也只返回你所需要的数据而不要发回整个页面. 首先我们要说一个很重要的方法:GetCallbackEventRefernce.我把我的理解写出来,可能是错误的,恳请指出,非常感谢! GetCallbackEventReference首先实现让客户端脚本有能力传递参数给服务器端的RaiseCallbackEvent方法,然后返回RaiseC

如何在无刷新页面的情况下实现客户端回调实例

客户端|刷新|无刷新|页面 经常在网上找各种各样的资料看,来解决某一具有针对性的问题,可是最终发现还是MSDN好,可惜大部分没有汉化,而且实例型的资料并不是很多,但不管怎么说MSDN还是需要我们认真学习的!<%@ Page Language="C#" AutoEventWireup="true"   CodeFile="ClientCallback.aspx.cs" Inherits="ClientCallback" %

一步步打造漂亮的新闻列表(无刷新分页、内容预览)第一步_基础应用

没有分页.这样如果数据量很大时,情况就变得十分糟糕,往往打开一个网页就需要很长的时候,大大的降低了的用户的体验效果. 而分页的话也是很有讲究的,不同的数据库往往对应着不同的分页方式.这里不做讨论.下面我们仅以简单的access作为数据库来进行新闻列表的无刷新分页.无刷新意味着要使用ajax技术,当然无刷新不仅仅是ajax,还有其他的方法做到无刷新,如将所有的数据一次性读取出来,然后根据页数的不同显示不同的内容,这个仅仅靠JavaScript就可以实现了,但是这个无疑是饮鸩止渴,和上面没有分页效果

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

刷新|无刷新|页面 在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, ASP.NET2.0 自带的无刷新页面技术没有被很多人了解,甚至不少人认为该功能有些"鸡肋".但如果我们仅仅是在程序中加入很少部分的 Ajax 特性, Atlas . Ajax.Net 等就显得有些"杀鸡用牛刀"的感觉了.而且,我认为使用 ASP.NET2.0 提供的方法进行开发并不很复杂,相反,使用很

客户端无刷新调用服务器程序

谈起客户端无刷新远程调用,其好处无需多言.其实现方式除了早些年流行的iframe异步加载外,现在更多的是用基于JavaScript+xmlhttprequest对象技术,比如如日中天的Ajax.而在这里我们介绍的是ASP.NET本身对客户端远程调用的支持--客户端回调(念diao),当然了,它的本质也是XMLhttprequest.类似的帖子在网上已经被翻烂了,如果嫌这里说的不过瘾,可以自己动手看看高手们怎么说. 创建实现客户端回调的 ASP.NET 页必须执行以下操作: ·实现 ICallba

利用iframe无刷新上传文件的坑

原文:利用iframe无刷新上传文件的坑 页面里经常要用到文件上传的功能,而且要求页面不刷新,先说一下原理:页面里放一个file控件和submit按钮,外面用form表单包住,给form表单加上对应的属性值,action.method.entype.name,到这一步,能上传文件了,但是这样上传文件会刷新页面,这不是我们想要的.我们要的是文件上传时不刷新页面,那么也简单,在页面里放一个iframe,设置它的宽高为0,这里有两个坑: 1.需要设置iframe的name值与form的target属性

Ajax无刷新 返回一个集合

问题描述 我要这样一个效果有一个下拉列表框,里面是产品的类型有:酒类.饮料类.日用品类.比如当我选择了酒类,那么就查询显示所有酒类的产品,显示的是一个集合.我想使用Ajax无刷新技术.但是貌似Ajax返回的只是一个String值,请问有谁知道可以返回一个集合实现我要的效果吗? 解决方案 解决方案二:dwr解决方案三:Ajax返回的是一个xml文件.你可以自己设计xml文件的结构,当然可以保存多个数据了.解决方案四: 解决方案五:组织成json数据解决方案六:使用json数据解决方案七:json数