Spiga

ASP.NET 2.0 ClientScript Callback

2006-10-22 14:41 by Cat Chen, 645 visits, 网摘, 收藏, 编辑

当AJAX出名的时候,ASP.NET 2.0已经基本上完成并且离最后发布时间还剩下半年,此时人人都希望MS为ASP.NET 2.0加上AJAX支持但MS说我们没时间加了,AJAX将成为独立的Atlas项目并出现在ASP.NET 3.0中。不过ASP.NET 2.0中有一个非常通用的但只能称为Method而不能称为Framework的AJAX支持,那就是Callback。

Callback的使用非常简单,首先你要有一个实现了ICallbackEventHandler的Control,例如你在你的Page上面实现ICallbackEventHandler,这个接口会要你实现RaiseCallbackEvent()和GetCallbackResult(),讲简单点其实它们就从客户端接受一个String的传入交给你处理,你处理完就传回一个String给客户端,详细的处理由Page的RenderCallback来负责,这个不需要你操心。

如果你用Callback,好处是你不需要管什么WebService之类的东西,你可以把Callback整合到Page里面(如果你一个Page只需要一个Callback)或者你自己封装的某个Control里面(如果这个Control自己使用一个Callback)。可以看到,Callback是希望你把处理封装到Control,例如你自己可以继承Button写一个CallbackButton实现ICallbackEventHandler及其两个函数,然后你把RaiseCallbackEvent()冒泡为CallbackClick()事件。

Callback有一个有趣的地方,就是传入和传出String分在两个函数里面了。看起来,这是很蠢的行为,但实际上它是为了符合ASP.NET对象模型那种事件处理方式,也就是Event与Render的分离。ASP.NET里面,Event和Render不像ASP那样是直接相关的(因为某个按钮点击了,所以输出某个反馈),Event是影响于ASP.NET对象模型,或者直接点说主要就是控件树和HttpContext,然后Render是根据控件树和HttpContext去生成HTML,但任意多个Event对控件树和HttpContext的影响应该是正交设计的。你可以在Callback的时候好象Postback那样把所有数据都发回来然后填充控件树然后Render时就如Postback一样根据整个完整的控件树去输出。

最后,Callback是一个半成品,MSDN中关于Callback的资料也有很多错漏的地方,所以大家自己弄清楚怎么用好用就够了,MS的目标是让Callback和Postback一致从而方便实现AJAX,但暂时还没有实现,还有很多Script代码要自己去写。另外我在看Callback的文章时看到,在System.Web.Util里面有很多很好用的小工具式代码,可以给你带来不少方便的,在你写例如服务器端String转换为脚本端String之类的代码前请记得找找那里有没有写好的,不要为此而浪费自己的时间。

0
0
(请您对文章做出评价)
« 上一篇:ASP.NET 2.0 实在太强了!
» 下一篇:ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题
Add your comment

2 条回复

  1. #1楼 ocean2000[匿名][未注册用户]2006-11-01 12:17
    ”另外我在看Callback的文章“
    能否列出来了?给我参考下。
    tks。
      回复  引用    
  2. #2楼[楼主] Cat Chen      2006-11-01 13:55
    @ocean2000[匿名]
    不好意思,这篇文章其实是2005年写的,我只是在Cnblogs建一个新blog的时候迁移过来的,当时提到的东西现在已经记不起来。

    如果你需要学习Callback的使用方法,可以看MSDN,MSDN虽有错漏但也能让人看明白。如果你需要了解System.Web.Util里面的辅助类功能,可以在MSDN里看,也可以用Reflector来看。
      回复  引用  查看