第6 章 构建 Web 应用程序.pdf
《第6 章 构建 Web 应用程序.pdf》由会员分享,可在线阅读,更多相关《第6 章 构建 Web 应用程序.pdf(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 6 章 构建 Web 应用程序 大多数 Visual Basic 程序员都至少会进行一些 Web 开发。开发 Web 应用程序解决方案有两个常见的原因,一是为了使用一个简单的部署模型,二是为了拥有最广泛的潜在用户群(即任何使用浏览器的人)。虽然 Microsoft.NET Framework 的每个后续版本都使部署 Microsoft Windows 应用程序更为简单,但是 Web 应用程序在许多情况下仍然具有部署和访问优势。Visual Studio 2005 中熟悉的事件驱动、拖拉开发范型允许根据目标用户和期望部署模型(而不是开发团队的 Web 编程经验)来构建 Web 应用程序。在
2、Web 编程的早期,程序员构建的应用程序解析传入的 HTTP 请求,并利用字符串操作生成 HTML 输出。使用库(如用于 Perl 的 CGI 库)来处理常见任务,但是,正确地解析和处理请求的责任最终却落到了程序员身上。随着时间的推移,这种开发范型不断发展,并出现了新的 Web 开发技术,例如用于生成 HTML 输出的 Java servlets 或 ASP 与 COM 组件的组合。这些更新的技术通常要求程序员在多个开发环境中工作,它们仍然需要许多代码来生成基本的 HTML 输出,而得到的应用程序很难调试、维护和部署。然后,.NET Framework(包括 ASP.NET 1.0)和 Mic
3、rosoft Visual Studio.NET 的发布为开发人员引入了更好的方法,以使用服务器控件、事件处理程序、用任何.NET 语言编写的代码隐藏类以及高效的单向数据绑定来构建 Web 应用程序。Visual Studio 2005 构建于 Visual Studio.NET 引入的创新基础之上,使得无论是经验丰富的开发人员还是 Web 开发新手,进行 Web 开发都变得比以前更容易。对于 Web 开发人员而言,ASP.NET 是一个巨大的飞跃。ASP.NET 2.0 则是另一个巨大的飞跃。改进的一个主要方面是显著减少了常见任务(如数据访问)所需的代码行数。应用程序:零代码应用程序:零代码
4、 Web 站点站点 此应用程序演示 ASP.NET 2.0 中的改进,使您能够创建一个强大的交互 Web 应用程序,而无需编写任何 Microsoft Visual Basic 代码。新概念新概念 大多数重要的 Web 应用程序都需要某种数据存储,不管它是 Microsoft SQL Server 数据库、Microsoft Access 数据文件、XML 文件还是某些其他类型的数据源。根据应用程序的复杂程度,UI 显示直接从数据存储检索的数据,或者从一组业务对象获得的数据。在 ASP.NET 1.1 中,即使一个简单的 Web 页(用于显示直接来自数据库的产品列表)也需要大量代码来连接数据库
5、,并将数据绑定到服务器控件。在 ASP.NET 2.0 中,许多常见的数据访问情况可以只通过声明 ASPX 标记来实现 不要求编程。ASP.NET 2.0 中新的“零代码”功能涵盖最常见的数据访问情况。最简单的情况是使用一个服务器控件显示数据源数据的单向数据绑定。这种情况的常见例子是在下拉列表中显示州/省/市/自治区列表。一种更复杂的情况是使用多个控件的单向数据绑定,其中在一个控件中选择的值会影响在另一个依赖控件中显示的值 例如,在下拉列表中显示国家/地区列表,然后当选中某个国家/地区时,在另一个下拉列表中显示该国家特有的州/省/市/自治区列表。对于某些服务器控件,ASP.NET 2.0 甚至
6、包括内置的排序和分页功能。ASP.NET 2.0 中令人印象最深刻的“零代码”功能指:能够轻松地提供添加、更新和删除数据的用户界面和数据访问逻辑,而无需像在 ASP.NET 1.1 中一样编写这些基本操作所需的基础结构代码。声明性语言声明性语言 零代码 Web 站点这个短语可能有点用词不当,因为 ASP.NET 标记语言(即 ASPX 语言)正逐渐被认为是一种声明性编程语言。如果您具有严格的命令式编程背景,即使用过诸如 C、S、Java 和 Visual Basic 等编程语言,那么将 ASPX 视为一种编程语言也许听起来有点令人困惑,因为声明性编程是一种很不一样的编程模型。对于许多程序员而言
7、,基于 XML 的语言“感觉”根本不像一种编程语言。命令性编程往往相当直接地意味着非常低级的计算机操作方式。在任何特定的时刻,程序都处于通过执行所提供的指令而达到的特定状态。通过执行其他指令,程序会以一个新状态结束。当用命令性语言编程时,您通过提供实现目标所需的特定操作(即,告诉计算机如何实现目标)来实现期望的目标。当用声明性语言编程时,您指定目标,而编译器或解释器使用它预定义的算法来确定实现该目标的适当操作。如果不习惯考虑声明性编程,这些概念可能听起来有点陌生,但您可能已经不知不觉地成为了一名更有经验的以声明性方式编程的程序员。考虑以下声明性代码:SELECT*FROM Products W
8、HERE ProductID=55 您可能会认为这是 SQL 代码。SQL 是一个非常流行的声明性语言实例。SELECT 查询表示一个最终结果:选择 Products 表中 ProductID列值为 55 的各行的所有列。将这种查询表示为一组可执行的操作,该任务由该查询所发送到的任何数据库的查询处理引擎来完成。现在考虑一个 ASP.NET 标记块:该“代码”没有包含一组指令,而是定义一个最终结果:一个窗体包含一个用“Canada”预填充的文本框和一个标记为“Save”的按钮。ASP.NET 有一个预定算法,可以将这些声明转换成适合不同类型浏览器的输出(例如,适合 Internet Explor
9、er 的 HTML)。不必提供获取正确输出所需的任何特定操作,因为 ASP.NET 替您负责这些工作。正如本节中的应用程序所演示的,ASP.NET 标记只需很少的编程工作就可以提供很多功能。使用 ASPX 语言不只可以控制布局或到 HTML 的简单映射,ASPX 还允许定义行为,包括丰富的用户界面和数据库通信。当使用 ASPX 时,您使用的远不只是用于编码用户界面的数据格式 您正在使用一种最新和最流行的声明性语言进行编程。数据绑定数据绑定 在发布.NET Framework 之前,数据绑定的名声不佳,因为对于需要复杂行为的应用程序而言,使用 Visual Basic 6 非常麻烦。.NET F
10、ramework 1.0 版引入新的数据绑定功能,该功能模仿大多数开发人员自己编码以获取数据绑定行为的做法。.NET Framework 的一个最了不起的功能是:可以使 Web 开发人员在 Web 窗体上使用高效而简单的单向数据绑定。只要提供一个可绑定的服务器控件(例如具有数据源的 DropDownList),该服务器控件就可以负责循环数据,并为每个数据项生成适当的 HTML。虽然这样做非常简单,但 ASP.NET 1.1 中的数据绑定仍需要代码来创建数据源,将数据源分配给适当的数据控件,然后调用数据控件的 DataBind 方法来实际使控件循环访问数据源。在 ASP.NET 2.0 中,只需
11、封装数据源设置和 ASPX 中的绑定,而让服务器控件负责其余的工作。演练演练 ASP.NET 2.0 中最简单的数据绑定是数据源数据的只读表格显示。使用 Visual Studio 2005 IDE,首先创建一个新的 Web 窗体,并将数据源控件拖到该窗体上。此应用程序使用 SqlDataSource 控件,不过还可以使用其他数据源控件,例如 Microsoft Access 数据文件或 XML 文档。SqlDataSource 控件负责连接到 Microsoft SQL Server 数据库并检索所请求的数据。当将新的 SqlDataSource 控件添加到窗体时,Data Source C
12、onfiguration Wizard 可以指导您设置该控件。第一步是建立该控件与数据库通信的连接设置。图 6-1 显示已经配置第一步中到 Northwind 数据库的连接。图图 6-1 Data Source Configuration Wizard。接着,指定希望数据源控件从数据源选择的数据。此应用程序使用一个简单的查询来选择 Northwind 数据库中 Products 表的所有行:SELECT*FROM Products 有了连接和 SELECT 查询,SqlDataSource 控件就具备从数据库检索数据所需的全部信息。向导所生成的 ASPX 标记的结果为:asp:SqlDataS
13、ource ID=ProductsDS”Runat=server”SelectCommand=SELECT*FROM Products ConnectionString=您将注意到,以声明方式从 web.config 配置文件读取连接字符串使用了新语法。web.config 中对应的项如下所示(为提高可读性,添加了换行符):既然 Web 窗体有了数据源控件,您就可以添加支持数据绑定的其他控件,并将它们绑定到数据源控件。对于简单的表格显示,新的 GridView控件不需要特殊的配置 只要为其提供数据源控件的 ID,它就可以生成完整的数据表。可以使用 GridView 的 Common Tasks
14、 智能标记来分配数据源,或者只使用下面的 ASPX 标记来设置 GridView 的 DataSourceID 属性:可视化 Web 设计器中的最终结果如图 6-2 所示。SqlDataSource 控件在设计视图中是可见的,但当在 Internet Explorer 中查看时,只有由 GridView 生成的数据表是可见的,如图 6-3 所示。图图 6-2 使用零代码绑定到 SqlDataSource 的 GridView。图图 6-3 在 Internet Explorer 中查看的最终输出。双向数据绑定双向数据绑定 虽然使用零代码进行单向数据绑定非常方便,但创建快速只读显示的总工作效率优
15、势不是那么显著。在 ASP.NET 1.1 中,更可怕的工作是为 CRUD(创建、读取、更新和删除)操作进行双向数据绑定,并提供一个可用的界面,包含诸如排序和分页这样的功能(例如,每页显示 10 条记录,并有 Next 和 Previous 按钮)。ASP.NET 2.0 简化了双向数据绑定工作,并同样需要零代码。奥秘在于数据源和 GridView 控件的功能。在此应用程序的第一页,可以看到如何创建配置为只选择数据的 SqlDataSource 控件。但 SqlDataSource 控件还可以用于更新、插入和删除数据。对于不同类型的查询,SqlDataSource 控件只需适当的 SQL 命令
16、和参数。可以自己输入多行 ASPX 标记,也可以使用 Data Source Configuration Wizard 的高级功能来创建标记。在为 Data Source Configuration Wizard 设置数据选择后,“Advanced Options”按钮就可以使用了,它打开图 6-4 所示的对话框窗口。选中第一个复选框将提示向导利用您提供的选择信息来探测数据库的数据结构。查询完数据库的结构后,向导将自动创建 SqlDataSource 控件对数据库执行 CRUD 操作所需的全部 ASPX 标记。图图 6-4 Data Source Configuration Wizard 的高
17、级 SQL 生成选项。在 Visual Studio.NET 2003 中,向导(例如 Data Adapter Wizard)可以帮助您创建进行 CRUD 操作的代码,但结果是 Visual Basic(或者 C#)代码,然后必须将其以编程方式绑定到数据控件。另外,将生成的代码放置在代码文件的“设计器生成的”区域,在这里进行更改会有极大的危险,因为如果再次调用向导这些更改将丢失。将生成的代码移出“设计器生成的”区域意味着不能使用向导来更改适配器设置。相比之下,Visual Studio 2005 中的 Data Source Configuration Wizard 生成的 ASPX 标记用
18、相应的参数声明性地表示更新、插入和删除命令。下面的 ASPX 清单显示向导为 Northwind Products 表生成的标记。asp:SqlDataSource ID=SqlDataSource1”Runat=server”SelectCommand=SELECT Products.*FROM Products ConnectionString=“DeleteCommand=DELETE FROM Products WHERE Products.ProductID=ProductID InsertCommand=INSERT INTO Products(Products.ProductNa
19、me,Products.SupplierID,Products.CategoryID,Products.QuantityPerUnit,Products.UnitPrice,Products.UnitsInStock,Products.UnitsOnOrder,Products.ReorderLevel,Products.Discontinued)VALUES(ProductName,SupplierID,CategoryID,QuantityPerUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLevel,Discontinued)Update
20、Command=UPDATE Products SET Products.ProductName=ProductName,Products.SupplierID=SupplierID,Products.CategoryID=CategoryID,Products.QuantityPerUnit=QuantityPerUnit,Products.UnitPrice=UnitPrice,Products.UnitsInStock=UnitsInStock,Products.UnitsOnOrder=UnitsOnOrder,Products.ReorderLevel=ReorderLevel,Pr
21、oducts.Discontinued=Discontinued WHERE Products.ProductID=ProductID 现在,其他数据控件(如 GridView)可用于更改数据库中的数据(通过 SqlDataSource 控件)。为了使 GridView 控件能够更改数据,在“Properties”窗口中将 AutoGenerateDeleteButton 和 AutoGenerateEditButton 属性设置为 True,如图 6-5 所示。图图 6-5 启用数据更改的 GridView 属性。所得到的标记与单向数据绑定示例没有太大的不同。添加的只是具有两个属性的 Com
22、mandField 元素,它告诉 ASP.NET 生成编辑和删除链接按钮:当在浏览器中查看该 GridView 时,可以看到每行数据的 Edit 与 Delete 链接。如果单击 Edit 链接,该行就变成一组可编辑的控件(一般是文本框),如图 6-6 所示。单击“Update”将更改保存到基础数据源(本例为 Microsoft SQL Server)。这就是不用编写一行代码的双向数据绑定!图图 6-6 在 Internet Explorer 中使用零代码编辑产品。修饰零代码站点修饰零代码站点 这些零代码功能的确令人注目,但目前在视觉上不是太有感染力或者不是太用户友好。随着家庭和商务用户越来越
23、习惯于利用 Web 来工作和娱乐,他们要求 Web 页更具有视觉感染力 即使是编辑库存数据。幸运的是,ASP.NET 2.0 对格式设置有大量的支持,换句话说,它可以改善零代码 Web 站点的外观。例如,GridView 控件允许您控制颜色、字体和布局信息来创建具有吸引力并且实用的数据表。为数据控件选择一个专业的预打包外观的最快方法是使用 Auto Format 功能,通过“Common Tasks”智能标记窗口可以访问该功能,如图 6-7 所示。还可以利用“Common Tasks”窗口来启用 GridView 控件的排序和分页功能。如果您曾经尝试使用 ASP.NET 1.1 中的分页(例如
24、 DataGrid),您就会意识到使用 GridView 控件是多么简单 只需选中一个复选框即可。GridView 和 SqlDataSource 负责控制分页的其余细节。图图 6-7 GridView Common Tasks 智能标记对话框窗口。“Auto Format”对话框允许从许多预构建的格式中进行选择,这些格式包括颜色、字体、行的样式、可选行样式、选定的行样式、标题行样式,等等。图 6-8 所示的“Auto Format”对话框用于为支持分页(每页最多 10 条记录)但不支持排序的 GridView 选择一种格式。图图 6-8“Auto Format”对话框窗口。Visual St
25、udio 2005 中的 Auto Format 功能为选定的控件生成许多元素和属性。利用 Sand&Sky 格式生成下面的标记:.为每个网格复制所有这些格式设置,从而使 Web 站点中数据网格的格式保持相同,这是一项非常费力的任务。幸运的是,通过创建一个新的主题(将在下一个应用程序中说明)可以将这种格式统一应用于 Web 站点。注注当启用分页时,可以利用 GridView 控件的 PageSize 属性来更改每页显示的数据行数。小结小结 每一个 Web 应用程序都是独特的,但总会有一些相似之处。一个相似之处是用于只读显示的基本数据访问,或用于查看和修改数据的界面。ASP.NET 2.0 中新
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6 构建 Web 应用程序
限制150内