1 、 ICallbackEventHandler.RaiseCallbackEvent
客户回调特性有一个限制:不能指定应执行服务器上的哪个方法。客户回调特性将执行服务器上的 RaiseCallbackEvent 方法,它在 ICallbackEventHandler 接口中定义。因此,在使用客户回调特性执行服务器端方法时,必须执行 RaiseCallbackEvent 方法,给该方法添加自己的服务器端逻辑。由于不能指定要执行哪个服务器端方法,就只能执行服务器端代码,把结果返回给客户。如果要指定调用哪个方法,就可以给 RaiseCallbackEvent 传送一个参数,来指定调用哪个方法,并在 RaiseCallbackEvent 中处理它。如下面的例子所示:
public string RaiseCallbackEvent(string eventArgs)
{
if (eventArgs == "Method1")
//call method 1
else if (eventArgs == "Method2")
//call method 2
...
}
2 、
ICallbackEventHandler 的两个方法 RaiseCallbackEvent 和 GetCallbackResult 必须执行,才能使回调发挥作用。 RaiseCallbackEvent 方法带一个参数,它包含客户端方法中的数据, GetCallbackResult 方法给客户机返回一个字符串,表示服务器端方法的输出。返回值作为一个参数传送给客户端回调方法。
3 、 Request.Browser.SupportsCallback 检查浏览器是否支持回调
4 、获得回调事件
使用 Page 类的 GetCallbackEventReference 方法来获得客户端的回调函数 Page.ClientScript.GetCallbackEventReference()
GetCallbackEventReference 有四个重载方法:
【1】public string GetCallbackEventReference(
Control control,
string argument,
string clientCallback,
string context)
【2】public string GetCallbackEventReference(
Control control,
string argument,
string clientCallback,
string context,
string clientErrorCallback)
【3】public string GetCallbackEventReference(
string target,
string argument,
string clientCallback,
string context,
string clientErrorCallback)
【4】public string GetCallbackEventReference
(
Control control,
string argument,
string clientCallback,
string context,
string clientErrorCallback,
bool useAsync
)
表 4-1 描述了 GetCallbackEventReference 的参数:
参 数 说 明
control 执行 IcallbackEventHandler 的控件
target 如果没有指定控件,该参数就是执行 ICallbackEventHandler 的控件的 ID
argument 要发送给 RaiseCallbackEvent 的值
clientCallback 客户端回调方法的名称
context 从客户端事件传送回客户端回调方法的值
clientErrorCallback 客户端错误回调方法的名称。这个方法在服务器抛出异常时执行
useAsync true 表示同步执行回调; false 表示异步执行回调。
返回值 调用客户端回调的客户端函数的名称。
5 、 string m_callBack=Page.ClientScript.GetCallbackEventReference() 函数返回的是一个字符串,表示的是客户端执行的回调函数,类似于 WebForm_DoCallback('__Page',arg,ClientCallback,ctx,ClientErrorCallback,false), 此时 m_callBack 中即为该函数的函数名。
客户端通过引用该字符串( <%=m_callBack%> )来调用该函数,此时客户端会执行 ClientCallback 函数,并将 ctx 值传给它。再将 arg 值传给服务器,服务器端会执行 RaiseCallbackEvent 和 GetCallbackResult 函数,并接收 arg 。
6 、 WebForm_DoCallback 方法带的参数:当前页面、发送到服务器端的 RaiseCallbackMethod 中的参数值、客户端回调方法、发送给客户端回调方法的 context 值、服务器抛出异常时执行的客户端方法、是否实时回调。
7 、 ' CallbackResult 构造方法
' 第一个参数:将要异步刷新的内容所属的 Control 类型
' 第二个参数: Control ID
' 第三个参数:发送的参数,包括 content, innercontent, image, or javascript
' 第四个参数:发送到浏览器的内容
8 、 要同时刷新多个控件,需要声明多个 callbackresult ,将它们添加到 CallbackResults 下 , 最后返回 CallbackResults.ToString() 即可