使用ICallbackEventHandler接口更高效实现Ajax

使用ICallbackEventHandler接口可以方便地高效地实现Ajax功能

1、处理页面需实现ICallbackEventHandler接口,此接口有两个方法

a、GetCallbackResult  此方法返回处理结果给客户端,请求完成后自动调用

b、RaiseCallbackEvent此方法是从客户端获取数据 由参数eventArgument 接收,并进行相关处理得出结果

2、注册回调和主调脚本

a、注册回调函数  string reference = Page.ClientScript.GetCallbackEventReference(this, "arg", "SendData", "context");

注册一个对于回调函数的引用,用于获取返回结果,并进行业务逻辑处理,注册的函数名和客户端书写的函数名需相同才能引用

b、注册主调函数,主调函数,像服务器发送请求 string regCallbakeScript = "function CallServer(arg,context){" + reference + "}";
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", regCallbakeScript, true);

c、客户端脚本:一个回调函数fucntion SendData(arg,context){alert(arg);}

直接调用CallServer函数发送请求

/// <summary>
    /// 实现ICallbackEventHandler接口,完成Ajax更快的功能
    /// </summary>
    public partial class _Default : System.Web.UI.Page,ICallbackEventHandler
    {
        private string returnValue = string.Empty;
        protected void Page_Load(object sender, EventArgs e)
        {
            //注册回调脚本、具体实现自己写,此脚本中接收返回结果
            string reference = Page.ClientScript.GetCallbackEventReference(this, "arg", "SendData", "context");
            //注册处理脚本
            string regCallbakeScript = "function CallServer(arg,context){" + reference + "}";
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", regCallbakeScript, true);
        }

        #region ICallbackEventHandler 成员

        /// <summary>
        /// 返回结果
        /// </summary>
        /// <returns></returns>
        public string GetCallbackResult()
        {
            if (string.IsNullOrEmpty(returnValue))
                return (returnValue = "-1");
            return returnValue;
        }

        /// <summary>
        /// 触发RaiseCallbackEvent事件获取客户端数据,然后进行处理
        /// </summary>
        /// <param name="eventArgument"></param>
        public void RaiseCallbackEvent(string eventArgument)
        {
            returnValue = eventArgument;
        }

        #endregion
    }
客户端脚本代码:
<script type="text/javascript">

    //接收回调结果,此函数在处理服务器完成后自动回调,即为回调函数,相当Ajax中的回调函数
    function SendData(arg) {
        alert(arg);
    }

    //客户端逻辑函数
    function GetReturnValue() {
        var arg = "Hello CallbackEventHandler!";
        //调用页面加载完成后注册的脚本,传递参数‘arg‘由服务器进行处理,第二个参数‘context‘不用传递
        CallServer(arg,"");
    }
</script>
<input type="button" value="CallbackMe" id="btn" onclick="GetReturnValue()" />
时间: 2024-08-02 13:01:56

使用ICallbackEventHandler接口更高效实现Ajax的相关文章

使用ICallbackEventHandler接口实现轻量级的Ajax效果

1,网上关于ICallbackEventHandler的实现效果比较多,之所以继续写关于这个接口的使用有几个原因:(1)时间长了,容易忘记这个接口该怎么使用,肯定又要去搜索.(2)搜索出一堆别人的博客,看着别人写的不舒坦,不爽,所以自己按自己的想法想怎么写就怎么写.(3)看到自己写的博客,几乎很容易就立马想起来当时怎么使用的,很快就知道怎么使用了.(4)还有个原因就是,最近项目不紧,也不知道学点啥,就随便敲几行字. 2,ICallbackEventHandler接口弥补了Ajax框架的不足!Aj

ICallbackEventHandler 接口实现回调处理功能

在最近的项目实现中遇到了一个问题 在数据处理的过程中,需要请求获取数据,再做处理之后,可以在页面及时获取数据 开始时,首先想到的到是写Ajax请求,但在做后续数据处理后,处理获取数据等操作,感觉实现起来相当麻烦 后来选择使用的回调的方式实现 ICallbackEventHandler 接口适用于回调处理的操作,后来经过了解,才知道以前经常使用的控件GridView.DetailsView.TreeView都是实现了这个接口(>_<) ICallbackEventHandler接口封装了两个方法

如何搭建一个更高效的用户反馈机制?

如果标题吸引你点击进来,说明你的 App 已经积累了一定数量的用户了.想知道你的用户如何评价你的 App?想了解他们的需求?往下瞧↓↓ 近两年,越来越多的 App 开发者开始重视用户反馈,但每天面对大量繁冗.无序的用户反馈,运营人员处理起来很费力,甚至出现很多“没人理”的情况.如何搭建一个更高效的用户反馈机制? 友盟用户反馈就致力于提供这样的服务,让 App 开发者和用户之间的交流更加简单和实时,沟通“零距离”.近日,友盟用户反馈发布他们的最新版本(Android 5.1 /iOS 2.1),除

5年以下的软件测试人,如何学习才会更高效?

? 对于很多工作年龄在5年以下的软件测试人来说,“学习”是个刚需.但与此同时,满世界看了一堆干货听了一堆课程之后并无卵用的状态却并不少见. 作为软件测试行业的一名老鸟,我想要跟大家探讨一个有趣的问题——5年以下的软件测试人到底该选择如何学习,才会更高效?回首我的八年职业发展之路,有过触碰到天花板时的困惑,也遇到过在人生岔路口选择时的彷徨不安. 今天结合我多年的职业成长历程,从几个角度来依次探讨下这个话题——从技术成长,非技术成长,心灵成长三个方面谈谈我的一些认识和理解,同时也想分享一下我的一些职

脑机音乐接口,高效检测用户的情绪状态

目录 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区(微信号:Brain_Computer).QQ交流群:903290195 英国雷丁大学和普利茅斯大学的研究团队开发和评估了一个情感脑-机音乐接口(aBCMI),用来调节用户的情感状态.构造一个aBCMI来检测用户的当前情感状态并尝试调制它为了实现特定的目标(例如,用户平静或快乐)通过播放音乐根据一个特定的情感目标生成算法作曲系统和基于案例的推理系统. 脑机音乐接口(BCMI)是一种特定类型的BCI,其目的是让用户与音乐进行交互或控制音

这些小工具让你的Android 开发更高效

在做Android 开发过程中,会遇到一些小的问题,虽然自己动手也能解决,但是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vysor Vysor 是一个可以将手机的屏幕投影到电脑上,当然也可以操作,当我们做分享或者演示的时候,这个工具起到了作用. Vector Asset Android Studio 在1.4 支持了VectorAsset,所谓VectorAsset:它可以帮助你在Android 项目中添加Materia

除了cPickle,cjson外还有没有更高效点的序列化库了

除了cPickle,cjson外还有没有更高效点的序列化库了 http://blog.csdn.net/chen_lovelotus/article/details/7228745 msgpack最快,而且是跨语言的,二进制,但只能打包简单的list,dict,int,string,unicode,在memcache之类的 字符串协议里会有问题. marshal其次,也是二进制的,可以打包大多数python对象,缺点同msgpack,另文档上说各版本的python实现会不一样,但我这测下 来三台

如何使程序更高效的执行?

在codewars网站做题,做到一下一道题. var add = function (a, b) { return a + b; }; var lazy_sum = make_lazy(add, 2, 3); Test.expect(lazy_sum() === 5, 'Evaluates the expression when required');//这个是codewars网站特有的测试代码,自己运行要另行写 var double = function (n) { return n * 2;

25个让Java程序员更高效的Eclipse插件

Eclipse提供了一 个可扩展插件的开发系统.这就使得Eclipse在运行系统之上可以实现各种功能.这些插件也不同于其他的应用(插件的功能是最难用代码实现的).拥有合 适的Eclipse插件是非常重要的,因为它们能让Java开发者们无缝的开发基于J2EE和服务的应用程序.Eclipse的插件也能帮助他们开发不同 应用架构上的程序. 下面列出来的是25个最好的免费Eclipse插件,可以让开发者更高效的工作 . 提高代码质量的插件 1. FindBugs FindBugs可以帮你找到Java代码