现在的位置: 首页 > 综合 > 正文

ASP2.0中基于ICallbackEventHandler的回调机制

2013年11月10日 ⁄ 综合 ⁄ 共 2242字 ⁄ 字号 评论关闭
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有三个重载方法:

public string GetCallbackEventReference(
Control control,
string argument,
string clientCallback,
string context)

public string GetCallbackEventReference(
Control control,
string argument,
string clientCallback,
string context,
string clientErrorCallback)

public string GetCallbackEventReference(
string target,
string argument,
string clientCallback,
string context,
string clientErrorCallback)

表4-1描述了GetCallbackEventReference的参数:

表  4-1

参    数                 说    明

control            执行IcallbackEventHandler的控件
target             如果没有指定控件,该参数就是执行ICallbackEventHandler的控件的ID
argument           要发送给RaiseCallbackEvent的值
clientCallback        客户端回调方法的名称
context            从客户端事件传送回客户端回调方法的值
clientErrorCallback    客户端错误回调方法的名称。这个方法在服务器抛出异常时执行

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()即可

抱歉!评论已关闭.