ICallbackEventHandler 小析

来源:互联网 发布:淘宝是b2c还是c2c 编辑:程序博客网 时间:2024/05/15 04:26
项目中经常会用到查找的功能,比如查找某个设备了,某个人了,所以想写一个控件类似于scriptaculous new Ajax.Autocompleter (...),于是就查询下如何在asp.net 下实现回调,于是乎就研究下 这个接口到底是如何工作的,看是否有必要用这个特征,
该接口如此定义:
public interface ICallbackEventHandler
    
{
        
// Summary:
        
//     Returns the results of a callback event that targets a control.
        
//
        
// Returns:
        
//     The result of the callback.
        string GetCallbackResult();
        
//
        
// Summary:
        
//     Processes a callback event that targets a control.
        
//
        
// Parameters:
        
//   eventArgument:
        
//     A string that represents an event
        
//     argument to pass to the event handler.
        void RaiseCallbackEvent(string eventArgument);
    }
实现两个方法
    1 fire回调事件   2 得到回调结果

具体的例子是这样的:  http://www.codeproject.com/aspnet/clientcallback.asp
服务器端:
  1   实现两个方法 2 GetCallbackEventReference  注册客户端的回调事件
客户端:
  1  一个向服务器请求的js函数,这里回用到的注册的 Callserver函数
  2 取得服务器数据,调用客户端的回调
是的,是这样做的,也实现了,可是还有些让人知其然,不知所以然;猜想应该类似于ajax原始做法原理一致,就看了下数据的情况。

从这里开始查找   function CallServer(args,context){WebForm_DoCallback('__Page',args,ReceiveServerData,'this is context from server',null,false);alert(context);}   
WebForm_InitCallback(); 
没有找到两个函数  WebForm_DoCallback  WebForm_InitCallback();  于是跟踪http的情况 发现 WebResource.axd?d=DFODalfbD7c-8zhCoSX8DQ2&t=632984018010150749 HTTP/1.1
这个文件,晕,里面包含了所有的具体实现,基本原理是这样的:
1 客户端post一个请求 格式如: __EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPD
wUKLTYxMTMyNjg0OQ9kFgICAw9kFgICAQ8QDxYGHg1EYXRhVGV4dEZpZWxkBQpjdXN0b21lcmlkHg5EY
XRhVmFsdWVGaWVsZAUKY3VzdG9tZXJpZB4LXyFEYXRhQm91bmRnFgIeCG9uY2hhbmdlBRhyZXR1cm....
2 xmlhttprequest 开始等待返回状态,当然已经设置其回调动作
3 根据post内容,判断谁的动作,是否有回调请求,如果有回调请求,那么执行那实现的两个方法,返回数据,
格式如:
760|/wEWXALKkYL/DwKH2/LzCgKR1eNNAqy9g88MAs26w8oHAszhmvoGAvvL76oLAq65/5UEAuvF4JABAoW
mSwMIx5ySwsfi0= xmldocument
4 客户端的对象接到已经处理完请求的状态,把数据转交给客户端处理函数 (arg,xmltext)
5 销毁客户端的xmlhttpreuest对象

这就是其实现的内容,如果你对其细节还是感情绪,那就自己看看其js了。太长就不贴了。