2.5 ASP.NET AJAX使用方法概述

完成了上述配置之后,我们就可以立刻开始一次令人激动的ASP.NET AJAX之旅了!不过无论在开始什么样的旅行之前,我们都应该选择好最佳的路线。在上面的介绍中,我们知道ASP.NET AJAX分为服务器端和客户端两个部分,其中很多功能既可以完全使用客户端功能实现,也可以完全使用服务器端功能实现。那么这两种方法有什么不同?针对实际开发中遇到的种种不同的情况,我们应该如何选择最合适的方法呢?

2.5.1 服务器端和客户端使用方法的比较

首先,我们比较一下这两种开发方式的优劣,见表2-1。

表2-1 ASP.NET AJAX服务器端和客户端实现方式比较

比较内容

服务器端实现

客户端实现

性能

功能

较弱

强大

开发难度

跨平台(服务器端)

不支持

完全支持

从表2-1中可以看到,ASP.NET AJAX服务器端和客户端实现方式主要有如下4点显著差异:

(1) 性能:由于Ajax应用程序将在客户端运行,所以无论是服务器端实现方式还是客户端实现方式,最终都将生成JavaScript代码并在客户端浏览器中运行。然而,在服务器端实现方式中,服务器端控件将在运行时生成JavaScript代码并发送至客户端,这样就加重了服务器端的负担,也造成了程序运行效率的下降。

(2) 功能:ASP.NET AJAX所提供的服务器端控件并不是很多,其功能也不够丰富(但是作为服务器端控件扩展包的ASP.NET AJAX Control Toolkit,已经大大丰富了现有的ASP.NET AJAX服务器端控件,并且还在迅速发展中)。而ASP.NET AJAX的客户端控件则已经具备了一个较为完整的架构以及非常完善的功能,甚至可以和ASP.NET 2.0内建的服务器端控件框架相媲美。

(3) 开发难度:ASP.NET AJAX服务器端实现方式的编程模型和ASP.NET几乎完全一致。若熟悉ASP.NET开发,则将很快上手,并可充分借助Visual Studio提供的强大的功能(如编译期检查、智能感知等)提高开发效率,并且这种编程模型几乎不需要开发者具备任何的JavaScript(甚至Ajax)知识。而客户端实现方式则与传统的ASP.NET编程模型大相径庭,你不得不放弃现有的ASP.NET知识以及开发流程,而去接受并学习一种新的开发模型——ASP.NET AJAX XML脚本,并忍受客户端开发的种种不便。特别令开发者感到困难的是,当前甚至还没有任何一个IDE可以较为完美地支持JavaScript的开发/调试工作。

(4) 服务器端跨平台能力:由于ASP.NET AJAX的服务器端控件是基于ASP.NET 2.0开发的,所以这些控件也只能在ASP.NET 2.0框架的服务器端运行。自然地,对于非ASP.NET 2.0平台,我们将无法使用ASP.NET AJAX的服务器端功能。但因为ASP.NET AJAX客户端功能均由标准的JavaScript实现,与服务器端开发平台无关,所以我们可以在非ASP.NET 2.0服务器端实现,例如PHP页面中手工添加ASP.NET AJAX客户端脚本库的引用,进而使用其完整的客户端功能。

2.5.2 选择最适合的使用方法

这样,对于开发中遇到的不同情况以及不同需求,我们应该区别对待并选择合适的手工开发方式。下面是几个常见的场景。

(1) 为现有的ASP.NET 2.0应用程序增加部分Ajax功能:这种情况常常发生于我们已经拥有了一个带有完整功能的传统ASP.NET 2.0应用程序,但需要为其中的某些界面元素添加一些Ajax功能时。例如,为某个文本框添加自动完成功能,为某个页面中经常要变化的控件(例如,某个提供分页、排序功能的GridView)添加局部更新功能等。由于ASP.NET AJAX的客户端实现方式与现有的ASP.NET编程模型格格不入,且我们又不希望完全重写已经具有完备功能的现有程序,所以这时就应该选择服务器端实现方式。ASP.NET AJAX的服务器端实现方式也似乎正是为这种情况所设计的。你甚至不用修改一行现有的代码,只需在页面中添加一个新的ASP.NET AJAX服务器端扩展器控件,然后将其指向页面中某个现有的ASP.NET服务器端控件,即可为其添加丰富的客户端功能。或者,你可以使用ASP.NET AJAX的服务器端UpdatePanel控件将现有页面的某一部分包围起来,这样,这部分页面即自动拥有了Web应用程序梦寐以求的Ajax方式的局部更新功能!这些内容将在接下来几章中详细介绍。

(2) 从头创建“纯粹的”Ajax应用程序:所谓“纯粹的”Ajax应用程序,指的是服务器端没有任何表示层逻辑,而只用来提供数据,同时所有的表示层逻辑均在客户端JavaScript中完成的Web应用程序。极端一点说,这种“纯粹的”Ajax应用程序将只有一个页面,所有的功能(包括用户输入、与服务器通信、界面改变等)均通过客户端JavaScript来实现,例如Windows Live Mail。这无疑是对我们熟悉的ASP.NET应用程序开发模型的彻底颠覆!然而,它却能够带来非常优越的服务器端性能,以及前所未有的无比清晰的程序架构。对于这种需求,我们则显然必须使用ASP.NET AJAX的客户端实现方式。这种方式将让你能够对应用程序的任何一个微小的细节进行非常精确且高效的控制。这些内容将在本书第Ⅱ卷中详细介绍。

(3) 在非ASP.NET 2.0服务器端平台上使用ASP.NET AJAX:这种情况下的ASP.NET AJAX服务器端实现将鞭长莫及,我们只能考虑使用ASP.NET AJAX的客户端实现方式。但即使没有了ASP.NET AJAX服务器端的协助,ASP.NET AJAX客户端功能的光芒仍旧无法遮挡,极为引人注目。

相信通过这些分析,你已经可以找到这次ASP.NET AJAX之旅的最佳路线了。但需要注意的是,ASP.NET AJAX的两种实现方式并不是互相对立的,而是相辅相成的。上面所说的“选择某种实现方式”仅仅意味着“偏重使用某种实现方式”。例如,对于ASP.NET 2.0下纯粹使用客户端实现方式的ASP.NET AJAX开发,我们仍需要服务器端ScriptManager控件向浏览器发送ASP.NET AJAX客户端框架所必需的JavaScript文件。