首先要继承System.Web.UI.ICallbackEventHandler接口
实现public void RaiseCallbackEvent(string eventArg)和 public string GetCallbackResult()方法
流程:
(1)客户端先通过<input type="button" value="测试无刷新客户端回调" onclick="CallServerFucntion()"/>的单击事件
调用客户端的CallServerFucntion()方法;
(2)CallServerFucntion()方法通过GetCallbackEventReference()方法引发回调,
(3)服务端通过RaiseCallbackEvent()来处理从客户端传来的数据。
(4)处理结果由GetCallbackResult()返回给客户端。
(5)客户端再通过客户端事件ReceiveServerData()来接收由服务端发送来的数据。
客户端代码:
客户端代码
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ICallbackEventHandlerTest.aspx.cs" Inherits="WebTest.ICallbackEventHandlerTest" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5<html xmlns="http://www.w3.org/1999/xhtml" >
6<head runat="server">
7 <title>测试无刷新客户端回调</title>
8 <style type="text/css">
9 #t1{}{width: 409px;}
10 </style>
11 <script type="text/javascript">
12
13 // 也可以在后台void Page_Load(object sender, EventArgs e)里注册该客户端方法脚本
14 // {
15 // ClientScriptManager cm = Page.ClientScript;
16 // String cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", null);
17 // String callbackScript = "function CallServerFucntion() { var arg='客户端数据'; " + cbReference + "; }";
18 // cm.RegisterStartupScript(this.GetType(),"CallServer", callbackScript, true);
19 // }
20 function CallServerFucntion()
21 {
22 var arg="客户端的数据";//传递到服务端可供RaiseCallbackEvent事件处理的数据
23
24 // ClientScript.GetCallbackEventReference获取一个对客户端函数的引用;
25 // 调用该函数时,将启动一个对服务器事件的客户端回调。
26 // this:处理客户端回调的服务器 Control。
27 // arg:从客户端脚本传递给服务器的一个参数 。
28 // ReceiveServerData:一个客户端事件处理程序的名称,该处理程序接收成功的服务器事件的结果。
29 // null:表启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。
30 <%=ClientScript.GetCallbackEventReference(this,"arg","ReceiveServerData",null) %>
31 }
32
33 // ReceiveServerData可以接收、处理服务端传来的数据,serverData是服务端传来的数据。
34 function ReceiveServerData(serverData)
35 {
36 document.getElementById("t1").value=serverData;
37 }
38 </script>
39</head>
40<body>
41 <form id="form1" runat="server">
42 <div>
43 <input type="text" id="t1"/>
44 <input type="button" value="测试无刷新客户端回调" onclick="CallServerFucntion()"/>
45 </div>
46 </form>
47</body>
48</html>
49
50
服务端代码:
服务端代码
1using System;
2using System.Web;
3
4namespace WebTest
5{
6 public partial class ICallbackEventHandlerTest :System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
7 {
8 protected string result =string.Empty;
9
10 protected void Page_Load(object sender, EventArgs e)
11 {
12 // 当客户端没有写引发回调函数的时候(function CallServerFucntion()方法),可以通过此方法向客户端注入脚本。
13 // ClientScriptManager cm = Page.ClientScript;
14 // String cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", null);
15 // String callbackScript = "function CallServerFucntion() { var arg='客户端数据'; " + cbReference + "; }";
16 // cm.RegisterClientScriptBlock(this.GetType(),"CallServer", callbackScript, true);
17 }
18
19 /**//// <summary>
20 /// MSDN的解释:处理以控件为目标的回调事件。
21 /// 我的理解:客户端引发该事件,处理完后,数据可以通过GetCallbackResult()返回给客户端
22 /// 这里,通过客户端函数 function ReceiveServerData(serverData) 来接收 result
23 /// </summary>
24 /// <param name="eventArg">从客户端接收的数据</param>
25 public void RaiseCallbackEvent(string eventArg)
26 {
27 string clientData = eventArg;
28
29 result = clientData+ "---服务端处理的数据结果";
30 }
31
32 /**//// <summary>
33 /// MSDN的解释:返回以控件为目标的回调事件的结果
34 /// </summary>
35 /// <returns></returns>
36 public string GetCallbackResult()
37 {
38 return result;
39 }
40 }
41}
42