it之路。

asp.net 回调浅析

如何在asp.net页面实现回调:

1,将整个页面或某个自定义控件实现ICallbackEventHandler接口

2,在服务器端编码以自动生成客户端回调函数

3,在客户端添加脚本用以调用步骤2生成的回调函数并执行服务器的回调结果

 

首先,网页当然是无状态的,当服务器返回给客户端一个页面的时候,他们之间就已经没有任何关系了。客户端要想再回调服务器的方法,只能是ajax发送请求。

 

来看看回调是如何封装这个发送请求的过程的。

1,执行上面的第二个步骤需要调用clientscriptmanager实例的GetCallbackEventReference方法。当调用这个方法时需要传递一些参数:

1,处理回调的控件

2,客户端脚本传递给服务器的参数

3,接收成功的服务器回调结果的客户端脚本函数

4,启动回调之前的预处理方法。。。

当执行这个方法后,服务器就会为我们生成一个脚本库放在本页面的同级目录下,并且自动在页面添加对该脚本库的引用。而发送ajax请求的js脚本就被包含在这些库中,名字可能叫做WebForm_DoCallback。发送ajax请求的必备步骤就在这个函数中,瞧,微软都为我们写好了。

仔细看看,你可以发现,微软做了浏览器对ajax兼容性处理,如果你的浏览器不支持xmlhttprequest对象,那么,该脚本库将会采用隐藏帧的方式来实现局步的刷新。而且隐藏帧在被方法执行完之后会被移除。

2,当触发第3步手动添加的客户端脚本时,会执行webform_docallback方法。在该方法内部将请求发送到当前页面后,页面会执行RaiseCallbackEvent方法。至此处,核心的回调才被服务器处理。这个方法执行完后,紧跟着是GetCallbackResult方法,将结果返回给客户端脚本处理

3,有几个地方要注意,当我们服务器端生成发送ajax请求的函数时,我们必须指定我们要在客户端脚本处理请求结果的js方法。就像我们手写ajax请求那样,必须指定onreadystatechange,当返回readystate变为4是做一些正确的处理。而在这里ms都为我们做好了这一些,我们要做的就是将这些函数名作为参数指定好。名字一定要相同。

浅析结束。

posted @ 2010-09-18 23:13  3912.77  阅读(1051)  评论(0编辑  收藏  举报