ASP.NET基于ICallbackEventHandler的轻量级异步回调

使用ICallbackEventHandler可以实现简单的异步回调,

我进行了简单的封装,使用方法如下

客户端: 

 

Code:
  1. <html xmlns="http://www.w3.org/1999/xhtml" >  
  2. <head runat="server">  
  3.     <title></title>  
  4.   
  5.     <script language="javascript" type="text/javascript">  
  6. // <!CDATA[   
  7.   
  8.         function Button1_onclick() {   
  9.             CallSrvFun("a", "Test2", myfun);   
  10.         }   
  11.         function myfun(d) {   
  12.             alert("d=" + d);   
  13.         }   
  14. // ]]>  
  15.     </script>  
  16. </head>  
  17. <body>  
  18.     <form id="form1" runat="server">  
  19.     <div>  
  20.        
  21.         <input id="Password1" type="password" /><input id="Button1" type="button" value="button" onclick="return Button1_onclick()" /></div>  
  22.     </form>  
  23. </body>  
  24. </html>  

 

 

 调用方法: CallSrvFun(数据,服务端函数,回调函数)

服务端后台:

Code:
  1. public partial class WebForm2 : HahaPage   
  2.    {   
  3.        protected void Page_Load(object sender, EventArgs e)   
  4.        {   
  5.   
  6.        }   
  7.   
  8.        public void Test1(string data)   
  9.        {   
  10.            __LJEventValue = "abc1:" + data;   
  11.        }   
  12.          
  13.   
  14.    }  

后台要继承自HahaPage类,然后可以写一系列方法供客户端使用

核心在代码hahaPage代码如下:

Code:
  1. public class HahaPage : Page, ICallbackEventHandler   
  2. {  
  3.     #region ICallbackEventHandler 成员   
  4.     public string __LJEventValue="";   
  5.     protected override void OnLoad(EventArgs e)   
  6.     {   
  7.         base.OnLoad(e);   
  8.         string cbre = Page.ClientScript.GetCallbackEventReference(this"arg""__LJEventCallBackSrv""");   
  9.         string callback = "function __LJEventCallPageBackSrv(arg){" + cbre + ";}";   
  10.         Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "__LJEventCallSrv", callback, true);   
  11.         StringBuilder sb = new StringBuilder();   
  12.         sb.AppendLine(" var ljcallbackfunction = null;");   
  13.         sb.AppendLine("function CallSrvFun(data, event, callbackFunction) {");   
  14.         sb.AppendLine("    AddField(/"LjEvent/", event);");   
  15.         sb.AppendLine("    __LJEventCallPageBackSrv(data);");   
  16.         sb.AppendLine("    ljcallbackfunction = callbackFunction;");   
  17.         sb.AppendLine("}");   
  18.         sb.AppendLine("function __LJEventCallBackSrv(x) {");   
  19.         sb.AppendLine("    eval(/"ljcallbackfunction(x);/");");   
  20.         sb.AppendLine("}");   
  21.         sb.AppendLine("function AddField(name, value) {");   
  22.         sb.AppendLine("    name = WebForm_EncodeCallback(name);");   
  23.         sb.AppendLine("    value = WebForm_EncodeCallback(value);");   
  24.         sb.AppendLine("    var n = __theFormPostData.indexOf(name);");   
  25.         sb.AppendLine("    if (n == -1) { __theFormPostData += name + /"=/" + value + /"&/"; return; }");   
  26.         sb.AppendLine("    var m = __theFormPostData.indexOf(/"&/", n);");   
  27.         sb.AppendLine("    var left = __theFormPostData.substr(0, n);");   
  28.         sb.AppendLine("    var right = __theFormPostData.substr(m);");   
  29.         sb.AppendLine("    __theFormPostData = left + name + /"=/" + value + /"&/" + right;");   
  30.         sb.AppendLine("}");   
  31.         this.Page.ClientScript.RegisterStartupScript(GetType(), "__LJEventInit", sb.ToString(), true);   
  32.     }                     
  33.     public string GetCallbackResult()   
  34.     {   
  35.         return __LJEventValue;   
  36.     }   
  37.   
  38.     public void RaiseCallbackEvent(string eventArgument)   
  39.     {   
  40.         string eventName = Request["LjEvent"];   
  41.         MethodInfo m = this.GetType().GetMethod(eventName);   
  42.         if (m == null)   
  43.             __LJEventValue = eventArgument;   
  44.         else  
  45.             m.Invoke(thisnew object[] { eventArgument });   
  46.     }  
  47.  
  48.     #endregion   
  49. }  

Page_Load初始化注册客户端函数

RaiseCallbackEvent 获取回调的函数然后通过反射进行调用!

代码下载:lijun7788.download.csdn.net/

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值