先贴实例代码,关于实现机制还在研究当中(比如回调是如何调用的,为什么能做到无刷新等等)
aspx文件代码:
<%
...
@ Page Language="C#" AutoEventWireup="true" CodeFile="Default6.aspx.cs" Inherits="Default6"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
id
="Head1"
runat
="server"
>
<
title
>
Callback Page
</
title
>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<
script
type
="text/javascript"
>
...
//发起客户端回调的函数
function GetNumber()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
alert("GetNumber()");
UseCallback();
}
//接收回调的客户端函数
//接收函数接受两个字符串值:一个用于返回值,另一个(可选)用于从服务器传回的上下文值。
function GetRandomNumberFromServer(number,context)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
alert("GetRandomNumberFromServer");
document.forms[0].TextBox1.value = number;
}
</
script
>
</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
div
>
<
asp:TextBox
ID
="TextBox1"
runat
="server"
></
asp:TextBox
>
<
input
id
="Button1"
type
="button"
value
="Get Random Number"
onclick
="GetNumber()"
/>
<
asp:Button
ID
= "BtnGetNumber"
Text
= "GetNumber"
OnClientClick
= "GetNumber()"
runat
= "server"
/>
</
div
>
</
form
>
</
body
>
</
html
>
后台代码:
using
System;
using
System.Data;
using
System.Configuration;
using
System.Collections;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
public
partial
class
Default6 : System.Web.UI.Page,System .Web .UI .ICallbackEventHandler
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
private string _callbackResult = null;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
protected void Page_Load(object sender, EventArgs e)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//判断浏览器是否支持通过Http接收XML
if (Page.Request.Browser.SupportsXmlHttp == true)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。
//此重载方法的客户端函数包含:
//指定的控件(要实现ICallbackEventHandler接口)、参数(由RaiseCallbackEvent()方法返回)、客户端脚本(客户端函数名)和上下参数。
string cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "GetRandomNumberFromServer","context");
//生成客户端脚本
string cbScript = "function UseCallback(arg, context)" + "{" + cbReference + ";" + "}";
//注册客户端脚本
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "UseCallback", cbScript, true);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
ICallbackEventHandler 成员#region ICallbackEventHandler 成员
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 回调的处理方法,ICallbackEventHandler的方法
/// </summary>
/// <param name="eventArg"></param>
public void RaiseCallbackEvent(string eventArg)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Random rnd = new Random();
_callbackResult = rnd.Next().ToString();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 返回回调结果,ICallbackEventHandler的方法
/// </summary>
/// <returns></returns>
public string GetCallbackResult()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return _callbackResult;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
#endregion
}