随笔-313  评论-12175  文章-1 

《ASP.NET AJAX程序设计——第II卷:客户端Microsoft AJAX Library与异步通讯层》前言

 

在最近的一年以及今后的三五年内,我们有理由相信Web应用程序将受到更多开发者和用户的青睐。作为领路人Google的一系列基于Web的产品完全地颠覆了传统的网页概念,让用户甚至不敢相信基于浏览器的程序竟能实现如此强大的功能。浏览器这座宝库在沉睡多年之后终于被一个名为Ajax的“阿里巴巴”轻轻打开了一道缝隙。

微软公司自然不会对这片新大陆坐视不理。作为其首推的下一代网络用户界面的核心Ajax框架——ASP.NET AJAX(开发代号Atlas)就这样应运而生。虽然来得迟了一些,但出现后却立即得到开发者极为广泛的关注。依我之愚见,有如下几个原因:

  1. 功能强大:Ajax的“框架”有很多,但其中大多数与其说是框架,不如说是一些“类库”或“辅助函数库”,所能实现的也仅仅是让客户端的JavaScript调用XMLHttpRequest更加容易一些等简单的辅助功能。而ASP.NET AJAX作为微软的一整套Ajax解决方案,提供了众多其他框架难以企及的完善而强大的功能,例如JavaScript的完全面向对象支持、服务器端对客户端功能的封装等。
  2. 与ASP.NET结合紧密:随着对富客户端功能越来越多的需求,设计之初并没有考虑到纯粹的ASP.NET 2.0在刚刚出世之后就会立即陷入被淘汰的边缘,这时ASP.NET AJAX作为ASP.NET最重要的客户端补充及时出现,二者珠联璧合,交相辉映,使微软的Web解决方案能够上下贯通、趋于完美。ASP.NET AJAX也将在正式发布时成为ASP.NET 3.0的一部分。
  3. 易于使用:ASP.NET提出的服务器端页面模型是Web开发中的一次革命,它将HTML代码依照逻辑从属关系用服务器端控件封装起来,极大地提高了Web开发的效率。ASP.NET AJAX在这一点上和ASP.NET一脉相承,不过它作为ASP.NET在客户端的补充,将HTML标签作为客户端控件封装了起来。众所周知,HTML文档是结构化的,加上服务器和客户端的无状态通信过程,导致了其开发模型大多以面向过程为主。而通过ASP.NET和ASP.NET AJAX的这种基于控件和组件的封装,开发者可以容易地使用流行且更加合理的面向对象方式来设计Web应用程序。加之强大的Visual Studio支持,哪怕开发者不书写,甚至不懂得JavaScript,都能够创建出无以伦比的客户端Ajax应用程序。
  4. 开发模式新颖:所谓“树大招风”,微软公司在开发者,特别是开源阵营的开发者中口碑并不是很好,并往往被冠以“独断专横”的恶名。然而ASP.NET AJAX的开发模式却与微软公司传统的产品开发模式大相径庭。在微软公司内,传统的开发模式是在软件即将上市时发布一到两个Beta版本,并只对这个版本进行很少的修改后就正式发布,这往往导致了如此的结果:辛辛苦苦开发出的产品功能非常强大,但却不是用户所需要的,或是用户觉得使用起来并不顺手。ASP.NET AJAX的开发充分吸取了这一教训,在大约一年半的开发过程中,每4~6周会发布一个最新的预览版本,更快地得到用户的反馈,并随之对产品的发展方向加以调整。将近一年的开发历程证明,这种方式受到了社区非同寻常的好评,也使ASP.NET AJAX框架的形象变得平易近人,甚至好多微软“敌对”阵营(例如PHP、Java等)的开发者都在各自的平台上开始使用ASP.NET AJAX。

综上所述,ASP.NET AJAX的前景一片乐观,定当在未来的几年内受到越来越多的开发者的关注,并毫无疑问地成为如同ASP.NET一样令人瞩目的开发框架。

 

内容介绍

作为一门还在发展中的技术,ASP.NET AJAX才刚刚发布了初始的1.0版本,甚至目前尚无完备的参考文档等官方资源。因此,我将在书中讲述ASP.NET AJAX的方方面面,从最基础的“Hello World”示例到复杂的整站程序和底层的实现原理分析,从最简单的客户端效果到其深层次的用户心理学分析及用户体验改善。

正因为本书的介绍范围广泛,所以有必要将其分3卷出版,以便于读者根据实际需要有所选择地进行阅读。而这3卷中的核心思想则始终是提高用户体验,这也正是Ajax的根本理念。

第Ⅰ卷:服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit

第Ⅰ卷从最易于理解和使用的部分入手,介绍ASP.NET AJAX框架中能够与传统ASP.NET无缝对接的服务器端部分,包括服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit。这部分内容不需要读者具备任何客户端开发知识,只要在Visual Studio中拖拖放拽即可实现强大的客户端Ajax功能,例如局部页面更新、异步回送、拖放、动画等,非常适合为现有的ASP.NET 2.0应用程序添加少量的Ajax特性,或是基于ASP.NET 2.0的一些简单Ajax功能的实现。

此外,这一卷力求在给入门开发者提供一个完整的ASP.NET AJAX架构总揽的同时,也能适当介绍深入些的内容,包括部分原理、实现等。

第Ⅱ卷:客户端Microsoft AJAX Library与异步通信层

第II卷就是你现在看到的这本书。其中侧重分析了ASP.NET AJAX框架的客户端部分,包括对JavaScript在面向对象、DOM操作方面的扩展,ASP.NET AJAX客户端组件,ASP.NET AJAX XML脚本等,还将介绍ASP.NET AJAX框架为我们在客户端用JavaScript与服务器端通信而创造的种种便利条件,包括直接调用Web Service、页面方法以及ASP.NET应用服务(例如身份验证、用户个性化以及全球化服务)等。ASP.NET AJAX框架的客户端部分适合从零开始创建完善、复杂、高效的Ajax应用程序。

第Ⅲ卷:高级主题

第Ⅲ卷将介绍ASP.NET AJAX相关的高级主题,包括ASP.NET AJAX应用程序的调试方法和技巧、性能优化、部署、源代码结构及部分源代码分析、客户端/服务器端自定义组件/控件的开发等内容。

除此之外,这一卷还将更加紧扣Ajax的核心思想——提高用户体验,包括用户心理学、用户行为分析理论等内容,深层次挖掘提高用户体验的方法。

 

本卷结构(点击超链接可以阅读本章内容)

第0章 客户端与服务器端编程模型

本章承接第Ⅰ卷,简单比较了ASP.NET AJAX服务器端编程模型和客户端编程模型,力求帮助读者承上启下更快地从熟悉的ASP.NET AJAX服务器端编程模型切换至本卷所要介绍的客户端编程模型中。

第一部分 ASP.NET AJAX 1.0核心

第1章 ASP.NET AJAX对JavaScript的扩展

本章介绍了ASP.NET AJAX客户端框架对JavaScript进行的一系列扩展,只有基于这些扩展构成的坚实基础,我们才能容易地进行后续开发。这些扩展包括基本类型扩展、面向对象支持、组件扩展、增强的DOM操作以及其他常用扩展等。

第2章 异步通信层

异步通信功能是Ajax中的核心理念,本章详细介绍了ASP.NET AJAX框架中异步通信层的方方面面,旨在为读者提供关于异步通信层的完整和清晰的认识。包括异步通信层的功能、架构以及常用类型等,并在最后通过示例程序演示了客户端应用程序通过异步通信层与服务器端交互的方法。

第3章 异步调用Web Service和页面中的类方法

ASP.NET AJAX异步通信层为我们在客户端JavaScript中调用服务器端Web Service或ASP.NET页面中的类方法提供了极为便利的基础设施,不但无需掌握任何具体的Ajax实现原理,甚至允许我们在JavaScript中直接用熟悉的、类似C#语言的语法来完成一次与服务器的异步通信。鉴于其重要性,本章用大量的示例程序全面地演示了异步通信层生成客户端代理的种种使用方法与具体操作细节,包括调用Web Service、调用页面中的类方法、处理异步调用中的异常、保持用户上下文、使用HTTP GET调用、以XML方式序列化数据等,并极为详细地归纳总结了服务器端和客户端数据类型的自动转换规则。

第4章 客户端页面生存周期

本章介绍了ASP.NET AJAX客户端框架提供的、与ASP.NET服务器端页面生存周期有着异曲同工之妙的客户端页面生存周期模型。包括维护客户端应用程序的Application对象和管理异步回送过程的PageRequestManager对象的功能和使用方法,以及由这两个对象暴露出事件所组成的客户端页面生存周期的各个阶段等内容;并通过多个实际开发中经常用到的实例程序,演示了借助客户端页面生存周期并配合UpdatePanel控件对异步回送过程进行全面、精确控制的方法。

第5章 应用程序服务和本地化

本章介绍了ASP.NET AJAX框架对从客户端通过JavaScript对ASP.NET 2.0应用程序服务(身份验证服务和用户个性化服务)的支持以及其提供的充分可定制能力;并通过示例程序介绍了ASP.NET AJAX框架对客户端脚本本地化功能的支持。

第二部分 ASP.NET AJAX Futures CTP

第6章 客户端组件、XML脚本语言与绑定

本章分类介绍了ASP.NET AJAX Futures CTP中提供的丰富的客户端组件,以及其引入的ASP.NET AJAX XML脚本语言编程模型,并与传统的JavaScript编程模型进行了比较;进而引出配合ASP.NET AJAX XML脚本语言中绑定的概念以及绑定中使用的转换器组件。

第7章 简单客户端控件/组件

本章详细介绍了ASP.NET AJAX在Futures CTP版本中内建的各种简单客户端控件/组件的使用方法。这些控件/组件包括用来表示页面中单个常用HTML元素的基本UI控件、用来以组件化方式响应用户操作的动作组件、用来验证用户输入的验证器组件、用来为现有用户界面元素以及控件/组件添加额外功能的行为组件、用来在页面中实现简单动画效果的动画组件、用来在客户端实现计数器功能的Counter组件以及用来在客户端定时触发事件的Timer组件等。

第8章 数据源组件和数据绑定UI控件

本章通过大量示例程序介绍了ASP.NET AJAX客户端框架提供的若干功能强大、使用方便并具有良好可定制能力的数据源组件以及数据绑定UI控件,及其带来了一种具有创造性的组件化、封装良好的数据访问模型。包括服务器端DataService类、客户端DataTable对象、客户端DataSource和XMLDataSource数据源、修饰客户端数据的DataView组件、显示列表数据的ListView控件、实现分页导航的DataNavigator控件、实现数据过滤的DataFilter组件和实现客户端排序的SortBehavior行为、维护集合中单个条目的ItemView控件、用XSLT修饰并显示XML数据的XSLTView控件控件等。

第9章 实现客户端拖放效果

本章介绍了ASP.NET AJAX客户端拖放框架的DragDropManager对象以及IDragSource和IDropTarget接口这三个核心成员的常用属性、方法和事件,并分析了其间的交互关系。随后通过示例程序介绍了框架内建DragDropList可拖放列表的使用方法。最后用一个完整的将商品拖放至购物车中示例程序演示了通过实现IDragSource和IDropTarget接口来自定义拖放行为的方法。

第10章 通过Web Service桥调用远程Web Service

本章介绍了ASP.NET AJAX提供的Web Service桥出现的意义及其解决的问题,并通过调用Yahoo! Weather服务、调用Google Search服务两个完整的示例程序演示了Web Service桥对远程Web Service进行本地代理的强大、灵活功能及其给开发人员带来的便利。

第三部分 实例程序

第11章 实例程序:RSS阅读器

本章使用ASP.NET AJAX客户端编程模型创建了一个简单但完整的RSS阅读器应用程序,起到融会贯通第Ⅱ卷内容的作用。该实例程序不但以“纯粹”客户端编程方式实现了RSS阅读器的基本功能,包括添加提要、保存提要列表、阅读提要内容等,还为日后对该RSS阅读器的完善方向给出了一些建议,并为继续实现这些功能相应地指明了书中的参考章节,给读者留下了充分的练习空间。

 

除了技术图书中常见的正文、插图、列表和代码之外,本书叙述过程中还时常穿插一些小段落,旨在给出相关讨论的内容的一些说明:

当前正文内容的其他替代使用方法、小技巧、Hack、拓展知识或是深入说明等。

 

需要特别注意、牢记在心的部分,比如硬性规定、框架内部命名规范、易被忽视之处等。

 

全面了解当前正文内容所需要参考的本书其他章节或其他图书中的内容。

 

当前正文内容(可能也包含分散在其他各处的内容)的总结、归纳、整理,帮助你迅速抓住内容要点。

 

 

读者对象

本卷适合如下读者阅读:

  1. 阅读过《Atlas基础教程》(由人民邮电出版社于2006年11月出版)一书、对ASP.NET AJAX产生兴趣并希望对其有更进一步了解的初级开发者;
  2. 阅读过《ASP.NET AJAX程序设计第Ⅰ卷:服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》(由人民邮电出版社于2007年4月出版)一书、了解ASP.NET AJAX服务器端编程模型以及服务器端各控件使用方法,希望继续学习ASP.NET AJAX客户端开发模型的开发者;
  3. 关心程序运行效率,希望在ASP.NET应用程序中使用“纯粹”客户端编程模型实现Ajax功能的开发者;
  4. 希望在非ASP.NET 2.0平台(例如PHP、JSP)上使用ASP.NET AJAX客户端框架的开发者;
  5. 其他对Web开发感兴趣的开发者。

你需要如下专业知识,以便更好地阅读本书:

  1. 了解客户端Web应用程序以及Ajax开发的基本常识,包括CSS、XHTML、JavaScript等。
  2. 了解ASP.NET AJAX服务器端开发模型以及ScriptManager、UpdatePanel等常用服务器端控件;
  3. 了解基本的ASP.NET 2.0相关知识以及常见Web应用程序功能在ASP.NET 2.0中的实现方法,例如,
    1. ASP.NET 2.0常见控件及其使用方法;
    2. ASP.NET 2.0页面生存周期模型;
    3. Web Service、主控/内容页面、成员资格、身份验证、角色控制、web.config配置文件等ASP.NET 2.0常用特性;
    4. 数据持久化(数据库)技术并执行数据访问;
  4. 了解基本的面向对象设计/开发原理。

 

预先需求

若要安装并使用ASP.NET AJAX框架的全部功能进行开发,那么你的系统必须满足如下条件:

  1. Windows2000、Windows XP、Windows Server 2003或Windows Vista操作系统;
  2. Microsoft .NET Framework Version 2.0或以上版本;
  3. 至少一种流行的浏览器:IE5.01(推荐使用IE6.0及以上版本)或FireFox 1.5及以上版本;

若想在开发、调试过程中得到更好的支持,请安装如下软件:

  1. Visual Studio 2005或Visual Web Developer Express Edition(免费);
  2. Visual Studio 2005 Service Pack 1(强烈推荐)

随后请依次安装如下本卷将要介绍的ASP.NET AJAX相关组件(可至http://ajax.asp.net/免费下载得到,安装、配置方法详见第Ⅰ卷):

  1. ASP.NET AJAX Extensions 1.0
  2. ASP.NET AJAX Futures CTP
  3. ASP.NET AJAX Control Toolkit

 

示例代码

你可以到人民邮电出版社图灵网站(http://www.turingbook.com/)或我的博客网站(http:// dflying.cnblogs.com)下载本书中所提到的示例程序代码,这些代码均采用C#语言编写。

 

勘误以及与作者联系

尽管在编写本书的过程中我努力做到严谨无误,但限于个人水平以及时间,书中难免有所遗漏或错误,这些可能存在的问题均与微软公司以及ASP.NET AJAX框架无关。我真诚地期望各位读者能够不吝指出书中的错误并告知我,以便重印时予以更正。本书的勘误也将发布在我的博客网站和图灵网站上。

你可以通过博客网站(http://dflying.cnblogs.com)或Email(DflyingChen@hotmail.com)与我取得联系并提出您的问题、批评和建议。

 

致谢

多少个不眠之夜之后,本书的第Ⅱ卷也将在此时付梓。虽然封面上仍只有一个人的名字,可是如果没有你们的支持,我绝无可能独立完成这样艰巨的任务。

感谢博客园网站(www.cnblogs.com)——中国最好、最大的微软技术交流社区,特别是站长杜勇(dudu)多年以来不求回报的无私奉献,为我们.NET爱好者提供了一个如此完美的技术交流平台。

感谢微软(中国)有限公司Windows Live Mail和Windows Live Calendar团队的同事,过去两年中的点点滴滴,是我人生中莫大的财富。特别是俞翔先生、陈竹修小姐和Aditya Bansod先生,在计划本书章节时给了我诸多中肯的建议。

感谢微软(中国)有限公司的王洪超(网名:开心就好)先生在百忙中抽出时间为本书第Ⅰ卷以及这本第Ⅱ卷作序。

感谢本书的技术审校者——博客园的赵劼(Jeffrey Zhao)先生。他高超的技术能力和认真严厉的审校态度在保证本书内容质量上功不可没!

感谢杜勇、苏鹏、谭振林、张逸、谭颖华、李会军等各位业界知名专家阅读拙作花费的宝贵时间,并热心地推荐本书。

感谢人民邮电出版社的傅志红女士、谢工女士、刘江先生、陈兴璐小姐和马玉伶小姐,在本书的策划、撰写、校对、发行的全程都给了我事无巨细的指导和帮助,不厌其烦地容忍我冗长的提问,带我一步步了解出版行业。

感谢博客园中各位热心的朋友,你们不但有着高超的技术水平,更有着一颗善良、热情的心(排名不分先后。人数众多,恐有遗漏,还请见谅)。感谢阿一、aspnetx、高海东、太阳、难得一蠢、Cat Chen、Clingingboy、WXWinter(冬)、TerryLee、FantasySoft、木野狐、GerryJiang、MK2、小小、stpangpang、天轰穿、剑在上海^_^、CrazyCoder、ZergTant、ddee、Minwell、birdshome、哈密瓜牌牛奶、小陆、chy710、XRAY2005、Jasun、kane、flyingbugs、Tery Sun、Jim Jiang、金戈铁马、culturenet、今天、wanclark、Anytao、Denny Zhang、云出岫、从无到有.NET、阿冬、hlj、jun、chuchenggang、wilburn、不做懒人、bugSharp、双飞燕、fhmsha、ABeyondMe、evanszhang、坚强2002、yunhuasheng、apan、Justin、锡山飞狐、dolby、Leepy、自由、创新、研究、探索……、太阳、Flyingis、JiKun.Xiong、Clark Zheng、王德水、Phinecos(洞庭散人)、Anthan等朋友在写作过程中给出的宝贵反馈与建议。特别是在ASP.NET AJAX的那次大变动之后,我曾一度心灰意冷,想就此放弃。是你们帮我拨开阴霾,重见阳光!是你们的支持让本书的第Ⅰ卷和第Ⅱ卷从脑海中的计划变为了现实!

感谢众多支持我的、未曾谋面的朋友,我们之间的讨论让我更深入地理解了ASP.NET AJAX,最终才有勇气提笔创作。

感谢我的家人和身边的朋友,是你们的爱让我从懵懂一步步走向成熟。

 

陈黎夫

Dflying Chen

posted on 2007-09-24 01:00 Dflying Chen 阅读(...) 评论(...) 编辑 收藏