PublicFunction GetCallbackResult()Function GetCallbackResult() AsStringImplements System.Web.UI.ICallbackEventHandler.GetCallbackResult End Function PublicSub RaiseCallbackEvent()Sub RaiseCallbackEvent(ByVal eventArgument AsString) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent End Sub
这段示例代码给的是一个function,但是名字却是接口规定的那个sub的名称。根据名称,我判断,当callback的时候,首先执行RaiseCallbackEvent,直译为“发生CallBack事件”,然后再执行GetCallbackResult,直译为“得到CallBackResult”。于是我做了一个实验,首先定义了一个全局变量: Private TestStr as String=""
然后把这两段代码修改一下:
PublicFunction GetCallbackResult()Function GetCallbackResult() AsStringImplements System.Web.UI.ICallbackEventHandler.GetCallbackResult TestStr=TestStr &"GetCallbackResult" End Function PublicSub RaiseCallbackEvent()Sub RaiseCallbackEvent(ByVal eventArgument AsString) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent TestStr=TestStr &"RaiseCallbackEvent" End Sub
然后在TestStr=TestStr & "RaiseCallbackEvent"处加上断点。执行到这一句是,检查TestStr的值,结果是空值,也就是说,发生Callback的时候,首先执行的是RaiseCallbackEvent,按F11调试,果然,执行完这个方法后才去执行GetCallbackResult。 于是我就对示例代码作了一些修改: 1、定义一个全局变量CBRE用来存储eventArgument的值: Private CBRE As String 2、修改代码如下:
PublicFunction GetCallbackResult()Function GetCallbackResult() AsStringImplements System.Web.UI.ICallbackEventHandler.GetCallbackResult Dim returnValue AsString If catalog(CBRE) IsNothingThen returnValue ="-1" Else returnValue = catalog(CBRE).ToString() EndIf Return returnValue End Function PublicSub RaiseCallbackEvent()Sub RaiseCallbackEvent(ByVal eventArgument AsString) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent CBRE = eventArgument End Sub