callback是一个结合了某个特定的用户接口对象的函数。它执行某个动作作为对对象事件的反应。事件可以是大量鼠标单击或者其他事件中的任何一个。
在ASP.NET 2.0中实现callbacks和标准web页中实现有些差异。下面列出了需要在页面代码中修改的地方:
1 、页面必须实现ICallbackEventHandler接口。
2 、页面必须实现ICallbackEventHandler接口的RaiseCallbackEvent方法,在服务器上调用这个方法执行callback函数。
3 、页面必须实现ICallbackEventHandler接口的GetCallbackResult方法,这个方法将把callback函数的执行结果返回给客户端。
我们应用过程中经常会遇到下面的问题:
1、客户端传递的参数,其类型均为字符串。
2、如何处理多入口参数、多出口参数问题。
3、如何处理多个Callback
4、如何可视化演示Callback执行进度。
下面用一个实例进行演示,里面有详细的代码及说明,在这里就不详细讲解其实现过程。
先看两张效果图:
运行中效果图>>>>

运行结束效果图>>>>>

下面是源代码:
前台页面 Callback_Test.aspx
后台CS代码 Callback_Test.aspx.cs
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;

//
要使用Callback,必须继承 System.Web.UI.ICallbackEventHandler
public
partial
class
Front_Test_Callback_Test : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler

...
{
private string _callbackResult = null;

protected void Page_Load(object sender, EventArgs e)

...{
ClientScriptManager csm = Page.ClientScript;

string cbReference = csm.GetCallbackEventReference(this, "arg", "GetResultFromServer", "context");
string cbScript = "function UseCallback(arg, context)" +"{" + cbReference + ";" + "}";
csm.RegisterClientScriptBlock(this.GetType(), "UseCallback", cbScript, true);
}


public string GetUpperStr(string str)

...{
//实际应用过程中要对字符串进行过滤
string[] args = str.Split("|".ToCharArray());
return args[0].ToUpper();
}


public string GetCustomerDetail(string str)

...{
//实际应用过程中要对字符串进行过滤

string[] args = str.Split("|".ToCharArray());

string[] returnValues = new string[11];

returnValues[0] = args[0] + "-" + args[1];
returnValues[1] = "this is CompanyName";
returnValues[2] = "this is ContactName";
returnValues[3] = "this is ContactTitle";
returnValues[4] = "this is Address";
returnValues[5] = "this is City";
returnValues[6] = "this is Region";
returnValues[7] = "this is PostalCode";
returnValues[8] = "this is Country";
returnValues[9] = "this is Phone";
returnValues[10] = "this is Fax";

return String.Join("|", returnValues);
}

//
public void RaiseCallbackEvent(string eventArg)

...{
string[] args = eventArg.Split("$".ToCharArray());

switch (args[0])

...{
case "GetUpperStr":
_callbackResult = args[0] + "$" + GetUpperStr(args[1]);
break;
case "GetCustomerDetail":
_callbackResult = args[0] + "$" + GetCustomerDetail(args[1]);
break;
default:
_callbackResult = args[0] + "$" + args[1];
break;
}
//测试延时效果
double n = 0;
while (n < 1000000000)

...{
n++;
}
}

public string GetCallbackResult()

...{
return _callbackResult;
}
}
本文引用自:http://blog.youkuaiyun.com/lxjhb/archive/2007/11/09/1875968.aspx