首先要继承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

服务端代码:
1
using System;2
using System.Web;3

4
namespace WebTest5


{6
public partial class ICallbackEventHandlerTest :System.Web.UI.Page,System.Web.UI.ICallbackEventHandler7

{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
