ASP.NET回调使用初探

页面的回发是在服务端中重新创建页面以及相应的控件,并且在服务器上运行相应的页面代码,最后将完整的新版本的页面发送回浏览器重新呈现。该方法会导致页面的刷新(重新加载)。整个页面将在服务端和浏览器客户端中往返一次,并且使用ViewState保存数据,网络消耗流量加大。

页面的回调则是使用浏览器脚本函数(JS等)向服务端的当前页面类发送相应请求,当前的页面类初始化页面并创建控件和其他相关成员,然后调用特殊方法,执行代码中自定义的操作过程,最后通过另一个方法返回结果给客户端浏览器,浏览器则使用另一个浏览器端的脚本函数读取结果值。此过程中页面保持在浏览器,没有任何刷新过程。实现了AJAX的无刷新效果。

前台代码*.aspx

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
< html  xmlns = "http://www.w3.org/1999/xhtml"
< head  runat = "server"
     < title ></ title
     < script  type = "text/javascript"
         //该方法接收回调服务器端返回的结果数据 
         //这边相当于服务器端的returnValue值,函数名为Page.ClientScript.GetCallbackEventReference()方法的第3个参数 
         //这个函数声明及函数体位于服务器端的Page_Load方法中,通过页面加载时动态添加到客户端脚本 
         function callback(returnValue) { 
         //操作返回结果值 
             alert(returnValue); 
        
         //客户端按钮调用事件 
         function ClientCallBack() { 
             //获取客户端数据, 
             var d = document.getElementById("txtName").value; 
             //调用函数传递一个字符串变量, 
             //该变量最终传递到后台的RaiseCallbackEvent()方法参数中 
             CallServer(d); 
        
     </ script
</ head
< body
     < form  id = "form1"  runat = "server"
     < div
  <%-- 该处全部使用HTML客户端控件,不能是服务端控件,如果是服务端控件,则将引发页面的回发 --%> 
  < input  type = "text"  id = "txtName"  /> 
     < input  type = "button"  id = "btnCallBack"   value = "callback"  onclick = "ClientCallBack()"  /> 
     </ div
     </ form
</ body
</ html >

 

 

后台代码:*.aspx.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using  System; 
using  System.Collections.Generic; 
using  System.Linq; 
using  System.Web; 
using  System.Web.UI; 
using  System.Web.UI.WebControls; 
    
namespace  RepateruSE 
{         
     /* HtmlCallBack页面类必须实现ICallbackEventHandler接口,该接口包含以下2个方法:RaiseCallbackEvent()和GetCallbackResult() 
     * RaiseCallbackEvent()参数是从浏览器端传来的,最后将结果用GetCallbackResult()返回浏览器 
     */
     public  partial  class  HtmlCallBack : System.Web.UI.Page, ICallbackEventHandler 
    
    
    
         public  string  returnValue =  null ; //存储回调的返回值 
         protected  void  Page_Load( object  sender, EventArgs e) 
         {    /* 使用Page.ClientScript.GetCallbackEventReference()可获取浏览器端的脚本函数的引用 
                以下4个参数分别为指定控件(页面对象this)、浏览器端发送的参数(arg) 、 
              * 浏览器端接收结果的函数名称(callback)以及上下文(context) 
              * 最后reference变量保存该引用。 
              */
             string  reference = Page.ClientScript.GetCallbackEventReference( this "arg" "callback" "context" ); 
    
             //CallServer函数是浏览器端函数,接收1个参数 
             //调用Page.ClientScript.RegisterClientScriptBlock方法将CallServer函数注册到页面对象客户端脚本中 
             Page.ClientScript.RegisterClientScriptBlock( this .GetType(),  "CallServer"
                 "function CallServer(arg,context){ "  + reference +  "};" true ); 
        
    
         //该方法返回回调的结果到客户端上 
         public  string  GetCallbackResult() 
        
             if  (writeAll()) 
            
    
                 returnValue +=  "true"
            
             else
                 returnValue +=  "false"
    
             //返回结果 
             return  returnValue; 
        
         //该方法是回调的执行方法,可以根据参数处理不同的回调内容 
         public  void  RaiseCallbackEvent( string  eventArgument) 
        
             returnValue = eventArgument; 
        
    
         //测试服务端执行事件 
         private  bool  writeAll() 
        
             string  str =  "text"
             for  ( int  i = 0; i < 10; i++) 
                 str += i; 
    
             System.IO.File.WriteAllText( @"c:\test.txt" , str); 
             return  true
        
    
}

 

 

要完成客户端回调,页面类定义时必须实现ICallbackEventHandler接口,也就是必须实现该接口的两个方法( RaiseCallbackEvent()和GetCallbackResult() )。RaiseCallbackEvent方法用于接收浏览器端脚本函数传递的变量和GetCallbackResult方法返回结果值到另一个浏览器端脚本函数。

该方法实现无刷新改变数据和AJAX的不同就是,该方法由ASP.NET提供,不需要用到AJAX框架,也无需手动编写XMLHTTP对象。

本文从百度空间搬家到博客园。

你可能感兴趣的:(asp.net)