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 尊重知识产权,引用请注出处

    广告位

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

  • 相关阅读:
    hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/Newd/p/4765815.html
Copyright © 2011-2022 走看看