zoukankan      html  css  js  c++  java
  • 使用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()" />
    Newd

    版权声明

    作者:扶我起来我还要敲

    地址:https://www.cnblogs.com/Newd/p/4765815.html

    © Newd 尊重知识产权,引用请注出处

    广告位

    (虚位以待,如有需要请私信)

  • 相关阅读:
    c++ 动态判断基类指针指向的子类类型(typeid)
    qt在GUI显示时,将调试信息输出到控制台的设置
    Qt库版查询
    Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明
    ICMP timestamp 请求响应漏洞
    linux 防火墙 ufw使用
    MySQL--binlog和relay log的生成和删除
    SSD 相关基础知识
    python36--将数据保存为excel
    MySQL 5.7并发复制和mysqldump相互阻塞引起的复制延迟
  • 原文地址:https://www.cnblogs.com/Newd/p/4765815.html
Copyright © 2011-2022 走看看