在ASP.NET中客户端与服务器端的交互默认都是整页面提交,此时客户端将当前页面表单中的数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器重新实例化一个当前页面类的实例响应这个请求,然后将整个页面的内容重新发送到客户端,这种处理方式对运行结果没什么影响,不过这种方式加重了网络的数据传输负担、加大了服务器的工作压力,并且客户还要等待最终处理结果、如果仅仅处理页面中的部分数据,可以使用AJJAX技术来实现,也可以使用回调技术实现。

实现要点:(1)实现System.Web.UI.ICallbackEventHandler接口中的方法RaiseCallbackEvent()和GetCallbackResult()

(2)给控件添加客户端调用方法

(3)编写客户端调用服务器方法成功和出现异常时,要执行的客户端方法

(4)编写回调处理的代码

  1、添加客户端调用方法

 
  
  1. <div> 
  2.                                                                                                               <%--当文本框失去焦点时--%> 
  3.       用户名:<asp:TextBox ID="txtName" runat="server"  onblur="CallServerMethod(txtName.value,null)"></asp:TextBox ><span id="message"></span> 
  4.       <br /> 
  5.       密 码:<asp:TextBox ID="txtPwd" runat="server"></asp:TextBox> 
  6.    
  7.   </div> 

2、客户端调用服务器方法成功和出现异常时的方法

 
  
  1. <script type="text/javascript" language="javascript"
  2.     //客户端执行的方法 
  3.     //下面的方法是接收并处理服务器方法执行返回的结果 
  4.     function Success(args, context) { 
  5.         message.innerText = args; 
  6.     } 
  7.     //下面的方式是当接收服务器方法处理的结果发生异常时调用的方法 
  8.     function Error(args, context) { 
  9.         message.innerText = "发生了异常"
  10.     } 
  11. </script> 

3、后台代码

 

 
  
  1. public partial class 回调技术 : System.Web.UI.Page, ICallbackEventHandler 
  2.    { 
  3.        string result = ""
  4.        //定义在服务器端运行的回调方法 
  5.        public void RaiseCallbackEvent(string eventArgument) 
  6.        { 
  7.  
  8.            if (eventArgument.ToLower().IndexOf("admin") != -1) 
  9.            { 
  10.                result = eventArgument + " 不能作为用户名注册"
  11.            } 
  12.  
  13.            else 
  14.            { 
  15.                result = eventArgument + "可以注册"
  16.            } 
  17.        } 
  18.        //定义返回回调方法执行结果的方法 
  19.        public string GetCallbackResult() 
  20.        { 
  21.            return result; 
  22.        } 
  23.  
  24.  
  25.        //服务器上执行的方法 
  26.        protected void Page_Load(object sender, EventArgs e) 
  27.        { 
  28.            //获取当前页的ClientScriptManage的引用 
  29.            ClientScriptManager csm = Page.ClientScript; 
  30.            //获取回调引用,会在客户端生成WebForm_DoCallback方法,调用它来达到异步调用 
  31.            //注意这里的“success”和“error”两个字符串分别客户端代码中定义的两个javascript函数 
  32.            //下面的方法最后一个参数的意义:true表示执行异步回调,false表示执行同步回调 
  33.            String reference = csm.GetCallbackEventReference(this,"args","Success","","Error",true); 
  34.            String callbackscript = "function CallServerMethod(args,context) {\n"+reference+"\n}"
  35.            //回当前页面注册javascript脚本代码 
  36.            csm.RegisterClientScriptBlock(this.GetType(),"CallServerMethod",callbackscript,true); 
  37.  
  38.        } 
  39.  
  40.  
  41.       
  42.    }