前 言 ASP.NET 4是一种建立Web解决方案的令人惊异的技术。早在ASP.NET 1.0版本于2000年发布时,许多人就认为它在Web应用程序开发方面迈出了具有革命性的一步。而后来的ASP.NET 2.0更激动人心,更富有革命性,ASP.NET 4则继续朝着这个方向前进,为在Web上建立应用程序提供了目前最佳的架构。ASP.NET 4建立在已发布的ASP.NET 1.0/2.0/3.5基础之上,但它主要关注的是开发人员的工作效率。 本书将介绍ASP.NET的所有内容,除了论述新主题外,还列举了一些有关这些新技术在实际操作中的例子。 0.1 简史 在各个公司考虑为Internet开发应用程序之前,应用程序的开发主要集中在桌面应用程序上。这些胖客户端应用程序适用于所有场合:家用计算、游戏、办公等。这种应用程序模型的流行可谓势不可挡。 在这个过程中,Microsoft开发人员开发胖客户端应用程序使用的是其主要产品Visual Basic(VB)。 Visual Basic不仅是一种编程语言,它还与便于开发胖客户应用程序的IDE有密切的关系。在Visual Basic模型中,开发人员可以把控件拖放到窗体上,设置这些控件的属性,给它们提供代码来处理控件的事件。例如,终端用户单击Visual Basic窗体上的一个按钮时,窗体的隐藏代码就会处理该事件。 在20世纪90年代中期,Internet开始崭露头角。Microsoft未能将Visual Basic模型转向基于Internet的应用程序的开发。Internet的确有强大的功能,此时胖客户端应用程序模型面临的问题也开始显露出来。基于Internet的应用程序创建了每个人都能访问的一个应用程序实例。拥有应用程序的一个实例意味着在对应用程序进行升级或打补丁时,对这个实例的修改会立即展现给通过浏览器访问该应用程序的每个用户。 为了进入Web应用程序行业,Microsoft开发了Active Server Pages (ASP)。ASP是开发Web页面的一种快捷方式。ASP页面由一个包含了标记和语言的混合页面组成。ASP的强大之处在于,在将页面发送给终端用户的Web浏览器之前,可以在页面上包含要在Web服务器上执行的VBScript或JScript代码指令。这是创建动态Web页面的一种简单方式,根据开发人员指示的指令定制动态Web页面。 ASP在尖括号和百分号(<% %>)之间使用脚本来控制服务器端的行为。开发人员可以先从一组静态的HTML开始建立ASP页面。可以使用脚本语言(如VBScript或JScript)定义页面需要的任何动态元素。当用户使用浏览器从服务器上请求页面时,asp.dll(这是一个ISAPI应用程序,它将脚本语言和Web服务器联系起来)就提取页面,根据脚本中指定的编程逻辑定义页面中的动态部分。定义页面中的所有动态部分后,得到的结果就是一个HTML页面,该页面输出到请求客户端的浏览器上。 在开发Web应用程序模型的过程中,静态HTML中混合了越来越多的语言,以帮助处理输出页面的操作方式和外观。随着时间的推移,一个典型的ASP页面上将出现非常多的语言、脚本和纯文本,开发人员开始把使用这些功能的页面称为“spaghetti code”(意大利细面条式代码)。例如,页面上可能使用了HTML、VBScript、JavaScript、CSS、T-SQL等。在这种情况下,页面是很难管理的。 ASP进一步发展并推出了新版本。ASP 2.0和3.0开始流行,因为这些技术使Web页面创建变得相对直观而方便。由于出现在20世纪90年代后期,又是.com诞生的时代,从而进一步促进了它们的流行。在这个阶段,人们开发了许多Web页面和门户,而ASP是一种业界领先的技术,个人和公司都使用该技术建立Web页面。甚至到现在,仍然可以在Internet上找到许多.asp页面—— 包括Microsoft的一些Web页面。 但是到1998年末Active Server Pages发布其最后一个版本时,Microsoft雇员Marc Anders 和Scott Guthrie有了另一个想法。他们称之为XSP(这只是一个缩写词,没有什么特别的含义)—— 这是一种以面向对象的方式创建Web应用程序的方式,而不是使用ASP 3.0的面向过程式的方式来创建。他们把这个想法告诉Microsoft中许多不同的团体,并得到了广泛的认可。2000年夏,Microsoft的专家开发会议发布了其测试版ASP+,与会者都非常渴望使用它。该技术在发布时(与.NET Framework 1.0的最终版本一起发布)被重新命名为ASP.NET—— 添加.NET标记是因为在当时Microsoft的大多数新产品都添加这个标记。 在引入.NET之前,传统ASP提供的模型和Visual Basic中开发的模型大相径庭,很少有VB开发人员能开发Web应用程序,而Web开发人员也不能开发VB的胖客户端应用程序。这是一条极大的鸿沟,ASP.NET则为此搭建了桥梁。ASP.NET把Visual Basic样式的事件模型引入到Web应用程序的开发中,为无状态的HTTP提供了迫切需要的状态管理技术。其模型非常类似于早期的Visual Basic模型,因为开发人员可以把控件拖放到设计界面或窗体上,处理控件的属性,甚至通过操作控件的代码来处理发生在它们的生命周期中的事件。ASP.NET综合了这两个模型的优点,如本书后面所述。 读者一定很希望使用ASP.NET 4这个最新版本,了解这种新技术能给自己带来什么。下面就讨论ASP.NET的目标,查看它有什么新内容。 0.2 ASP.NET的目标 ASP.NET 4是该产品的另一个重要版本,建立在前几个版本的核心功能之上,并带有额外的类和功能。.NET Framework和Visual Studio的这个版本在Microsoft内部的代码名称是Hawaii。ASP.NET 4继续致力于使ASP.NET开发人员成为Web领域中最高效的开发人员。本书也重点介绍ASP.NET 4和.NET Framework 4的新增内容。 Microsoft小组刚开始开发ASP.NET 2.0时,就设定了要实现的目标。这些目标集中于开发人员的效率、管理、性能和可扩展性。 0.2.1 开发人员的效率 ASP.NET 4的主要目标是效率。ASP.NET 1.x和ASP.NET 2.0的发布就已经达到了很高的效率,但效率还能进一步提高吗? ASP.NET开发小组的一个目标是去除ASP.NET中原来必需的大量繁琐的编码,使常见的ASP.NET任务更容易完成。开发人员的高效率将在本书中体现出来。在介绍这些功能之前,首先查看以前的ASP.NET 1.0技术,以便与ASP.NET 4进行比较。程序清单0-1使用ASP.NET 1.0在Web页面上建立了一个表,并可以对所提供的数据进行简单的分页。 程序清单0-1 在支持分页功能的DataGrid服务器控件上显示数据(仅用于VB) <%@ Page Language="VB" AutoEventWireup="True" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> 尽管这里使用了相当多的代码,但与使用传统的ASP 3.0来完成这项任务相比,所需的代码量削减了很多。这里不详细探讨这些旧代码的细节,只说明为了给表中显示的数据添加额外的常见功能(如分页功能),开发人员就必须创建定制的代码。 在ASP.NET 4中,这是开发人员效率提高最显著的一个方面。ASP.NET 4提供了一个名为GridView的服务器控件,这个控件非常类似于DataGrid服务器控件,但GridView服务器控件(除了提供许多其他新功能之外)内置了分页、排序和编辑数据的功能,而用户几乎不需要做任何工作。程序清单0-2就是使用GridView服务器控件的一个例子,该例子为Northwind数据库的Customers表中的数据建立了一个包含分页功能的表。 程序清单0-2 使用GridView服务器控件查看分页的数据集 GridView Demo