您的位置:首页 > 编程语言 > ASP

深度解析ASP.NET2.0中的Callback机制callback的一般使用方法还算简单,直接参照

2006-08-14 16:36 766 查看
深度解析asp.net2.0中的callback机制callback的一般使用方法还算简单,直接参照
callback的一般使用方法还算简单,直接参照msdn的帮助和范例就足够了。但是想要真正用好、用精,或者想开发一些基于callback机制的web组件,那么,就要先深入了解callback的实现机制了。在本文中,teddy将和您一起解析callback的整个调用、反馈机制,相信对于帮助您更好的使用callback,将能有一定的益处。

  callback vs atlas

  首先,谈谈atlas。很多朋友可能会觉得奇怪,已经有了callback,为什么又要出atlas呢?关于这个问题,atlas的作者怎么解释,我倒没有去调查。只不过从我个人对callback和atlas的使用感受来讲,觉得,callback作为一个接口和postback非常类似的实现,肯定是为了让用户类似使用postback来使用它。但是,它的这个类似postback的机制,应该说使用上还不是特别方便,也不易扩展,当然这是相比于其他的ajax框架实现来说的。因此,微软方面借鉴了许多的已有的ajax实现,如prototype,backbase以及ajax.net,并结合asp.net2.0的部分特有功能,发明了这样一个博采众长的ajax框架。基于atlas来开发ajax应用有多好,很难量化的来说,但至少不比其他的这些ajax框架来的差是肯定的,加上微软这个后台,以及像live.com这样的重量级站点的应用推广,其影响当然是值得期待的。

  不过,这也不是说callback实现没一无是处了,作为程序员,我们需要有正确的态度,在正确的使用情形,使用最正确的技术。没有哪一个框架是万能的,是适合任何使用环境的;就像大家都在争论那个软件开发方法最好,cmmi,rup,xp,agile~~,其实,没有最好,最合适的才是最好的。我们最应该做的,是了解各种方案的原理和优缺点,从而,合理的使用正确的工具来解决实际问题。

  begin from client script

  我们都知道,凡是ajax,从底层来讲,无外乎两种实现机制:xmlhttp以及iframe。在ajax这个词获得广泛关注之前,其实,基于这两种底层实现的功能框架,或者基于这两种技术的无刷新效果实现就已经被广泛的使用了。当然,发展到今天,在使用接口方面,这些底层机制的细节往往被框架给隐藏了,使用接口变得越来越简单,用户只要调用这些简单接口,没有必要知道具体是怎么实现效果的了。

  不过,这里我们既然是要解析callback的实现机制,那还是让我们从一个callback调用的客户端脚本调用开始,看看,微软是怎么实现这个callback机制的。

  1、clientscript.getcallbackeventreference(...)

  要激发一个callback,首先,当然需要在客户端本中发出一个调用。一个典型的调用语法如下:

<script language="javascript" type="text/javascript">

function any_script_functi c

{

 <%= clientscript.getcallbackeventreference(this, "arg", "receiveserverdata", "c

}

</script>

  clientscript.getcallbackeventreference(...)将根据传入的参数返回实际的回调脚本。这个函数有多个重载版本,因此,这些参数的含义,大家可以参考msdn。以具体的上面这段示例代码中的参数来说:

  - this表示执行回调的的服务端控件是当前这个page,当前的page必须实现icallbackeventhandler接口,包括必须实现string getcallbackresult()和void raisecallbackevent(eventargument)这两个接口函数,这个参数也可以是指向某个web控件的引用,当然,这个空间也必须实现icallbackeventhandler接口;

  - "arg"是将被传给raisecallbackevent的参数eventargument的值,可以使人以自定义格式的字符串;

  - "receiveserverdata"是当回调成功之后,处理返回内容的客户端脚本函数的名称,这个函数必须存在于执行回调的页面,并且这个函数可以包含两个参数,例如:

<script type="text/javascript">

function receiveserverdata(result, c

{}

</script>

  这两个参数,分别是回调的返回数据result,和原封不动被返回的我们激发回调时的这个c

  - "c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: