一种是用Page.ClientScript.GetCallbackEventReference + ICallbackEventHandler
接口。
一种是update Panel+ScriptManager.RegisterDataItem。
一种是直接使用javascript+WebService的类和方法,通过 <asp:ServiceReference path=”~\WebService\SimpleWebService.asmx” />引入。
功能上,三者都可以实现AJAX。第一个方法的GetCallbackResult不能返回复杂对象,而且只能返回一个字符串,从扩展的角度,算是一个致命缺陷。第二种方法可以返回多个字符串参数,但不如第三者的直接返回对象更灵活。
1<2<3
而从使用的方便性上,如果程序中一个结果导致多个控件发生改变,显然用javascript去操作并不轻松,所以第一种方法和第三种都不如第二种那样可以先在服务器端处理再返回。而如果不利用asp控件在服务器端编程的便利性,单从调用webservice的角度,第三种方法扩展性更好,如果一个页面有多个AJAX需要ICallbackEventHandler 接口来处理怎么办呢?好吧,查了一下还是可以用RaiseCallbackEvent的参数来进行switch的。那么在client script上两者要写的注册代码差不多。
1=3<2
这样的话,平时用AJAX,建议在2和3之间选择。就我个人而言,我觉得没有理由传送太复杂的对象给javascript处理,因为逻辑放在服务端,客户端的复杂对象也就是用来触发页面不同的控件,用RegisterDataItem也就可以触发,虽然没有复杂对象那么美。甚至没有1的context那样的方便(context可以直接用于传递原上下文环境)。但方法2的好处在于服务器端方便性上,服务器端控件还是在服务器端做事情方便。有自动完成,有方法参考,还可以debug.当然如果是js高手就不一样了。2008