ASP.NET技术从1.0版本升级到1.1变化不是很大。然而,从ASP.NET 1.x升级到2.0,却不是件轻而易举的事情。ASP.NET 2.0技术增加了大量方便、实用的新特性。图1-1所示列举了ASP.NET 2.0的主要技术特性。
如图1-1所示,ASP.NET 2.0主要提供控件、页面框架、服务与APIs等3个方面的技术特性。
图1-1 ASP.NET 2.0技术特性
控件
在ASP.NET 1.x时代,由于内置服务器控件数量有限、功能覆盖面窄,因此,开发人员怨声载道。为了消除这个技术软肋,ASP.NET 2.0做出了突破性改进。在ASP.NET 2.0中,新增数十个服务器控件。根据控件功能特征,可分为:数据控件(包括数据源控件和数据绑定控件)、登录系列控件、Web部件、站点导航控件和其他控件等。这些服务器控件对于提高工作效率,降低开发成本有着重要作用。
页面框架
在页面框架方面,ASP.NET 2.0同样做出了重大改进,主要体现在以下4项技术特性:母版页、主题和皮肤、编译机制和本地化。母版页特性在大型Web站点中应用广泛,它能够在一定程度上代替框架页功能,从而迅速建立具有统一布局和外观的页面,并且有效降低维护人员的工作强度。主题和皮肤是ASP.NET 2.0的一项新增功能,使用此功能可以一次性设置一种类型的服务器控件外观样式。该外观可方便地应用于单个页面、整个Web应用程序,甚至整个服务器。在应用程序编译方面,ASP.NET 2.0提供了几种替代方案,从而扩大了编译的选择范围,开发人员可以根据特定需要进行选择。另外,ASP.NET 2.0在本地化方面也做出了一些改进。
服务与APIs
这个部分包括的新特性在ASP.NET 2.0中占有较大比例,主要包括成员资格管理、角色管理、用户配置、数据缓存、配置与管理工具等。利用这些功能,可以快速实现用户和角色管理、个性化用户配置、数据缓存、应用程序可视化配置等任务。以成员资格和角色管理功能为例,在ASP.NET 1.x时代,实现这两项功能是比较繁琐和困难的;而在ASP.NET 2.0中不仅提供默认数据库表,而且只需调用几个简单的方法,就能够轻松地实现成员和角色管理功能。
新增服务器控件
在ASP.NET 1.x时代,有很多开发人员对其中的内置服务器控件提出批评。主要的观点是ASP.NET 1.x提供的控件数量太少,难以满足日益增长的开发需求,无法更快更好地开发应用程序。为了弥补ASP.NET 1.x的不足,ASP.NET 2.0新增了数十个服务器控件。根据控件功能,可以分为站点导航控件、数据控件(包括数据源控件和数据绑定控件)、登录系列控件、Web部件和其他服务器控件等。熟练使用这些服务器控件对于提供工作效率、减低开发成本有着重要意义。
1.站点导航控件
在ASP.NET 1.x时期,微软发布了一组IE Web Control控件(非内置控件),其中包括一个实现树形结构的TreeView控件,它就是典型的站点导航控件。在ASP.NET 2.0中,不仅包含和扩展了原有的TreeView,而且还新增了另外两个控件。图1-2所示显示了站点导航控件的应用效果。
站点导航控件主要用于实现站点页面导航功能。如图1-2所示,站点导航控件包括SiteMapPath、Menu和TreeView控件。SiteMapPath控件能够根据站点导航信息,准确定位当前页面所处整个Web站点的位置,同时,使用层次化表示方法,将位置信息显示为有序的静态文本或者超链接。另外,还可以通过调整相关属性,自定义位置信息的外观以及实现数据绑定等功能。Menu控件可构建与Windows应用程序类似的菜单。该控件不仅可与多种数据源控件集成,而且还可以支持自定义外观、事件处理等功能。TreeView控件主要用于显示树形结构,该树与Windows资源管理器中的树类似。同时,该控件还支持数据绑定、自定义外观等功能。以上有关站点导航控件的内容,将在第7章中详细讲解。
2.数据控件
ASP.NET 2.0的数据控件可细分为两类:一类是数据源控件,另一类是数据绑定控件。数据源控件包括SqlDataSource、AccessDataSource、XmlDataSource、SiteMapDataSource和ObjectDataSource。这些控件主要实现连接不同数据源、数据检索和修改功能,例如,查询、排序、分页、筛选、更新、删除和插入等。数据绑定控件主要包括GridView、DetailsView和FormView等。这些控件可与数据源控件配合,将获取的数据以不同形式显示在页面上。由于数据源控件和数据绑定控件支持良好的可视化设计时功能,因此,当利用Visual Studio 2005实现数据访问时,甚至不需要编写任何代码就能够完成任务。图1-3所示显示了在数据源控件支持下,GridView和DetailsView控件的应用效果。
图1-2 站点导航控件应用效果图 图1-3 数据控件应用效果图
图1-3中包括两个表格。左边的表格列举了数据库表中的数据,同时,还提供了分页和显示详细资料的按钮。该表格使用GridView控件创建。右边的表格显示左表中被选中行的详细数据,还提供了编辑、删除和新建等功能按钮。该表格使用DetailsView控件创建。有关数据控件以及图1-3中所示应用的实现,将在第9、10和11章中详细介绍。
3.登录系列控件
很多Web站点都提供了用户登录验证以及相关功能。常见功能包括用户登录、创建新用户等。总体而言,实现这些功能的基本方法比较类似,然而,由于开发人员的水平差异,可能造成一些不必要的漏洞和错误。为了解决这个问题,ASP.NET 2.0将与登录验证相关的实现集成为登录系列控件。这些控件包括:Login、LoginName、LoginView、LoginStatus、PasswordRecovery、ChangePassword和CreateUserWizard。利用这些控件可以轻松实现登录验证、创建新用户、显示登录状态、显示登录用户名、更新和重置密码等。出于灵活性考虑,登录系列控件不仅提供了大量成员对象,而且还支持自定义模板功能(部分控件支持)。另外,登录系列控件还加强了安全方面的控制。例如,默认情况下,登录系列控件是以纯文本形式工作于HTTP上。如果应用程序对安全性十分关注,那么可以使用带SSL加密的HTTPS。图1-4和图1-5所示显示了登录系列控件中Login控件和CreateUserWizard控件的应用效果。
图1-4 Login控件应用效果图 图1-5 CreateUserWizard控件应用效果图
Login控件用于实现用户登录验证,CreateUserWizard控件用于创建新用户。可能读者会沿袭ASP.NET 2.0之前的思路,认为实现以上两种应用需要添加多个文本框、按钮等元素,并设计实现数据库、数据访问逻辑等。实际上,使用Login和CreateUserWizard控件实现以上应用,非常简单,简单到不需要编写任何代码,不需要自建数据库,只需添加和设置控件即可。在本书的第16章中详细探讨了包括以上两个控件在内的7个登录系列控件的应用。
4.Web部件
Web部件是ASP.NET 2.0新增功能。如果曾经开发应用过SharePoint,那么对Web部件应该不会感到陌生。ASP.NET 2.0的Web部件功能包括多个服务器控件,例如,实现WebPart控件管理和控制的WebPartManager、实现编辑WebPart控件的EditorZone和EditorPart系列控件、实现目录管理的CatalogZone和CatalogPart系列控件、实现WebPart通信的ConnectionZone控件等。利用它们可以创建具有高度灵活性和个性化的Web站点。图1-6所示展示了利用Web部件技术构建的http://my.msn.com站点。
图1-6 Web部件应用效果图
使用Web部件构建的页面可以为用户提供多种个性化功能。例如,使用图中“Move”选项对WebPart控件进行布局调整,使用“Delete”和“Change details...”选项对WebPart控件进行配置和管理等。另外,使用Web部件还可以实现WebPart控件之间的通信、目录管理等功能。有关Web部件的详细内容,可参考本书第14章。
5.其他服务器控件
除上文介绍的4类控件之外,ASP.NET 2.0新增了其他服务器控件。这些控件包括BulletedList、HiddenField、FileUpload、ImageMap、MultiView(View)和Wizard。在本书的第8章中详细介绍了这些控件的基本功能、应用方法等。
1.3.2 母版页
每个站点都应具有统一的风格和布局。不同技术时代,给出了不同的解决方案。例如,在ASP技术时期,使用#include命令,在ASP.NET 1.x时期,主要使用用户控件。ASP.NET 2.0技术时期,则可以使用构建页面布局框架的技术特性—母版页。
母版页是扩展名为.master的文件,其代码内容和结构与普通.aspx文件类似。注意代码中包括一个或多个ContentPlaceHolder控件。在创建母版页时,需要将页面公共部分存储于母版页中,例如,页面公用的页头、页尾等,而页面非公共部分则使用ContentPlaceHolder控件实现占位。内容页文件虽然扩展名为.aspx,但是代码内容和结构与普通.aspx文件代码相距甚远,其代码分为两个部分:代码头声明一个或多个Content控件。开发人员需要在内容页代码头绑定母版页,同时,将页面非公共部分内容设置在Content控件标签之间。在运行时,用户不能直接请求母版页,只能请求访问内容页。此时,母版页和内容页将合并生成结果页,结果页面包含页面公共部分和非公共部分的运行结果。图1-7所示显示了母版页功能的应用示例图。
图1-7 母版页功能应用效果图
图1-7所示的内容节选自第5章的示例。在该应用程序中,母版页实现了页头和页尾等公共部分,中间的非公共部分则包含在内容页中。这样,母版页可被绑定在不同的内容页中,从而提高了开发人员工作效率,降低了开发和维护强度。
以上概括性介绍了母版页功能。在第5章中,读者不仅能够更加详细地了解母版页的基本功能,而且还可以接触到一些高级应用。例如,在母版页中实现嵌套,即父母版页嵌套一个子母版页;内容页绑定子母版页。又如,在内容页中访问母版页控件和属性、动态加载母版页、母版页应用范围、缓存设置等。
1.3.3 主题和皮肤
在未接触主题和皮肤功能之前,你可能已经习惯于使用级联样式表(CSS)设置页面和控件等元素外观和样式。虽然在ASP.NET 1.x开发中,CSS同样适用,但是如果碰到一些复杂控件,例如,Calendar、GridView,那么设置CSS将变得比较困难。如果能够完全根据控件自身外观和样式属性,而不仅限于CSS中规定元素,来设置服务器控件,那么整个实现过程将变得比较简单。ASP.NET 2.0中的主题和皮肤功能就能够提供这样的便利。
所谓“主题”是指页面和控件外观属性设置的集合。主题由一组文件构成,可能包括皮肤文件、CSS文件、图片和其他资源等。这些文件必须存储在App_Themes文件夹中。皮肤文件是主题的核心内容。这种文件的扩展名为.skin,其中包含各种服务器控件的各种属性设置。利用主题功能,不仅能够定义页面和控件的外观,还可以在所有Web应用程序、单个Web应用程序的所有页面或者单个Web页面中,快速一致地应用所定义外观。另外,还可以根据应用程序需要动态加载主题。图1-8所示显示了动态加载主题的应用效果。
图1-8 主题和皮肤功能应用效果图
如图1-8所示,Calendar控件默认加载Red主题,头部显示年月和星期的背景为红色。当“启用Blue主题”后,Calendar控件的头部背景将显示为蓝色,就好像是为控件换了层皮肤一样。如果不使用主题和皮肤功能来实现以上示例,那么实现过程可能比较繁琐,而且维护和修改也不方便。在使用主题和皮肤功能之后,则变得非常简单。以上示例选自第6章,其中详细介绍了示例涉及的理论和具体实现过程。
1.3.4 个性化用户配置
存储和访问用户配置数据一直是开发人员关注的热点。在ASP.NET 1.x时代,实现这一功能主要通过Session、Application等对象或者采用数据库存储的方法。这两种方法都有着本身不可克服的缺点。例如,使用前者容易发生数据丢失的情况,而使用后者比较繁琐,例如,需要自行设计实现数据库及访问数据的代码。为了解决以上问题,ASP.NET 2.0新增了个性化用户配置功能。
个性化用户配置功能主要用于存储单个用户配置数据,这些数据可以是简单数据类型,也可以是复杂数据类型,甚至自定义对象等。同时,单个用户既可以是匿名用户,也可以是注册用户。默认情况下,所有用户配置数据都存储在SQL Server数据库中,并且无需自行创建和维护该数据库,这些工作都由ASP.NET 2.0自动完成。个性化用户配置功能还支持从应用程序中任何位置访问的多种强类型API,以方便存储、显示和管理用户配置信息。使用个性化用户配置功能非常简单。首先,在Web.config文件中定义配置信息名称、数据类型等,然后,调用与用户配置功能有关的强类型API,例如,Profile实现对用户配置信息的存储、访问和管理等应用。图1-9所示显示了使用个性化用户配置功能实现存储和访问购物车信息的应用效果图。
如图1-9所示中,左半部分列举了网上商店的商品列表;右半部分列举了购物车内商品和总价。当用户在商品列表中选定所需商品,并单击“购买”按钮后,该商品将自动添加到购物车中。如果用户需要移除购物车中商品,只需单击“清除”按钮即可。另外,该应用允许匿名用户使用购物车。同时,当匿名用户通过注册成为注册用户之后,示例还支持将匿名时期的购物车信息无缝迁移到注册用户购物车中。虽然以上示例的功能稍显复杂,但是实现方法简单。整个实现方法的核心是使用个性化用户配置功能。有关该功能介绍,以及示例的实现过程将在第13章进行详细讲解。
图1-9 个性化用户配置功能应用效果图
1.3.5 成员资格和角色管理
多数站点的后台管理中,几乎都包括用户成员和角色管理功能,例如,新建、修改、删除用户和角色,为用户设置角色,管理角色中的用户等。在使用ASP.NET 1.x版本时,实现这些功能的主要方法是,首先,设计创建成员库表、角色库表等,然后,编写代码实现具体功能。实现所有功能可能需要花费不少的时间和精力,并且过程繁琐,容易出现错误。然而,使用ASP.NET 2.0新增的成员资格和角色管理功能则可以很好地解决这个问题。
成员资格和角色管理功能的核心是利用自动生成的数据库表、多个实现管理功能的API、成员资格和角色管理提供程序,实现模块化和自动化的成员资格和角色管理模式。具体而言,包括创建和管理用户和角色信息、实现对多种数据源中用户和角色信息的管理、验证访问应用程序的用户凭证、支持使用Cookie缓存角色信息、实现角色管理与成员资格管理等功能的集成。图1-10和图1-11所示分别显示了利用成员资格和角色管理功能实现的用户和角色管理应用。
图1-10 成员资格管理功能应用效果图 图1-11 角色管理功能应用效果图
图1-10所示显示了成员资格管理功能应用,其中包括用户列表,启用、编辑和删除用户功能等。图1-11所示显示了角色管理功能应用,其中包括新建角色、角色列表、编辑和删除角色、为用户设置角色等。实现以上示例过程中,既不需要创建SQL Server数据库表,也不需要实现数据库访问程序,只需根据业务逻辑调用成员资格和角色管理API。具体内容,可参考第15章内容。
1.3.6 配置和管理工具
为了快速方便地实现应用程序配置和管理,ASP.NET 2.0提供了两个内置的可视化工具:一个是ASP.NET MMC管理单元,另一个是Web网站管理工具。图1-12所示显示了ASP.NET MMC管理单元用户界面。
图1-12 ASP.NET MMC管理单元
如果计算机中安装了Internet信息服务(IIS)和.NET Framework 2.0,那么打开IIS即可使用ASP.NET MMC管理单元。利用该工具可对指定应用程序的连接字符串、应用程序配置、自定义错误、授权、身份验证、公共编译、页和运行时、全球化和标识、应用程序状态、位置等方面进行全面设置。所有设置结果都将显示在应用程序Web.config文件中。从这一角度而言,ASP.NET MMC管理单元是一个用于编辑Web.config文件的图形化工具。
图1-13所示显示了Web网站管理工具用户界面截图。
图1-13 Web网站管理工具
如果使用Visual Studio 2005创建ASP.NET 2.0应用程序,那么可以调用Web站点管理工具。与ASP.NET MMC管理工具不同的是,Web站点管理工具是一个Web应用程序,而不是一个Windows应用程序。Web站点管理工具提供了对指定Web应用程序的安全、应用程序配置、提供程序等多方面的设置。例如,创建管理用户和角色信息、设置SMTP参数、设置各种提供程序等。