asp.net2.0讲解1

 

ASP.NET 2.0入门经典(4)

20世纪后期计算机领域发生了空前的变化。对于那些以前只在卧室打转的人或终日不见阳光的瘾君子而言,Internet的急速发展给他们带来了前所未有的乐趣。在20世纪90年代之前,承认自己用计算机处理工作几乎是一件令人尴尬的事情,然而突然之间人人都希望能拥有一台计算机。每种业务都争先恐后地和Internet扯上关系,而且很多家庭都希望拥有自己的Web站点。如果一定要为Internet的急速发展寻找一个技术代名词,那么这项技术非Web浏览器莫属。但是,如果没有可以查看的内容,浏览器就变得一点实用价值都没有了。用户需要信息,而Web站点就像雨后春笋一样蓬勃发展,其主题丰富多彩,包罗万象。

20世纪90年代末期,世界充满剧变。一些商业帝国的根基就是一个最简单的想法—— 搜索引擎(Google)或者在线书店(Amazon)。人人都想知道怎样给自己建一个Web站点。HTML(HyperText Markup Language,超文本标记语言)可以实现人们的这个愿望,但很快人们就发现它的功能太简单了。开发人员可以显示图片和文本,但如果您想要的不止这些,那么应该怎么办?如果希望站点具有反应能力,也就是说能从用户接收信息并自动进行更新而不需要开发人员每次都编写新的页面,应该怎么办?如果希望将某个数据库连接到Internet上,或者希望显示一个股票目录,或者希望向每个访问站点的用户提供个性化的设置,或者只是希望向每个访问站点的家人或朋友提供漂亮的外观,又该怎么办?

这方面的竞争一直在继续,人们已经开发出好几种技术,包括CGIPHPJavaMicrosoft参与这项竞争的技术是ASP,它最引人注目的特点是比其他同类技术简单,容易入门。但是它也有很多让人激动的功能—— 当用户在Web站点内的页面之间浏览时可以保存用户的详细信息以及CalendarRotator等控件,可以把这些控件直接放置到页面中,就像使用HTML标记一样。ASP获得了巨大的成功。Microsoft做了进一步的开发;它创建了.NET Framework,而ASP.NET则成为ASP技术的“升级”版本,使用的是其成熟的编程语言VB.NETC#。这个变化在功能方面是一个很大的进步,但是Microsoft在一定程度上迷失了一个很重要的目标—— 简单性。Web站点的开发突然之间需要高昂的咨询费用,同时需要顶尖的美工人员。对于那些一开始缔造站点繁荣的人而言,它已变得高不可攀。

ASP.NET 2.0在这个方面向正确的方向回退了一大步。Microsoft意识到,人们在开发Web站点的时候不喜欢做的一件事就是编写代码。代码很枯燥且令人讨厌。然而,Microsoft也意识到有相当一部分人仍然靠编写代码为生。而且,这些编程人员不得不开发同样的功能,并一再重复。登录机制、菜单系统、购物车、用于站点中所有页面的站点标题—— 这些是很多Web站点都需要的功能。此时两个指导原则要发挥作用:简化它们对新手的使用难度,并减少开发人员必须重复的工作量。ASP.NET 2.0声称可以“减少70%的代码”;ASP.NET 2.0还带有很多控件,这些控件使得开发人员在数分钟之内就可以创建登录系统和菜单。

2003年下半年的时候,我们已经看到过名为ASP.NET 2.0的新版Active Server Pages。每个人都知道这些声明决不是刻意夸大,开发人员创建Web应用程序的方法将从根本上发生变化。Microsoft扩充了ASP以前版本的强大功能,同时在很大程度上减少了实现这些功能所需的工作。实现的简化意味着开发复杂站点的费用将缩减。或者,换一种说法,现在能够开发复杂站点的开发人员将大大增加。

另外,ASP.NET 2.0还附带了一个新的、不算昂贵的开发工具用于创建Web站点:Visual Web Developer ExpressMicrosoft以前开发的用于辅助创建Web站点的工具要么已经销声匿迹(Front Page),要么从来没有得以普及(Visual Interdev),但这次开发的工具找准了方向。Visual Web Developer将成为Visual Studio.NET套件的一部分,但名为Visual Web Developer Express受限版本的售价并不昂贵。利用它您可以在数分钟之内通过拖放控件创建一个站点,开发人员也能立刻识别出来,并简化页面的创建和管理。

本书将逐步引导您使用ASP.NET 2.0创建动态的、数据驱动的、复杂的Web站点。在本章结束时,我们将解释一些基本的想法并介绍一个完整的示例站点。然后将学习怎样使用Visual Web Developer Express(VWD)构建ASP.NET 2.0站点。

具体地说,本章包含以下5个主题:

       简单介绍ASP.NET 2.0

       回顾ASP.NET 2.0解决的Internet编程问题

       解释ASP.NET 2.0是怎样适应其他技术的

       浏览一个由ASP.NET 2.0构建的站点的动态功能

       理解创建ASP.NET 2.0页面(ASPX)将要使用的工具—— Visual Web Developer Express(VWD)

在以前的书籍中,如果在学习本章之后您能够创建简单的页面,那么我们的目的就算达到了,但ASP.NET 2.0鼓励学习更多的内容,在第2章结束的时候,您将知道一个正在运行的Web站点的结构和架构。本书的主要练习是为一个名为Wrox United的足球队创建Web站点,显示他们的新闻和比赛结果、出售他们的产品、拍摄他们的记录片,并根据登录的用户是客户还是管理员来显示不同的页面。作为惯例,我们将提供一些练习帮助复习本章中讨论的概念。

1.1 将要创建的站点

打开www.wroxunited.net查看一下站点(主页如图1-1所示)。这个站点完全使用ASP.NET 2.0创建,也是在本书中将要创建的站点。同时,它也是在本章和第2章中将要学习创建的一个微型工作模型。

  1-1

在主页上可以看到一个菜单系统、一个登录控件和一些新闻条目—— 如果使用旧版的ASPASP.NET,创建这些功能都将耗费开发人员大量的时间并编写很多代码。以登录机制为例,开发人员必须考虑接受用户ID和口令、根据一组已经存在的用户和口令进行核对、确保口令不会以任何方式弄错并确保口令的传送安全可靠。因此,开发人员需要进行很多相对而言不那么重要的工作,没有一两个小时是不能完成这个功能的。现在,这只需要几秒钟的时间。

单击View Page Source链接—— 现在不理解这些代码并不要紧—— 用户将看到少于10行的ASP.NET 2.0代码:

<%@ Page Language="VB" Trace="false" MasterPageFile="~/site.master"

AutoEventWireup=false codefile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register TagPrefix="wu" TagName="News" Src="News.ascx" %>

 

<asp:Content ID="Content1"ContentPlaceHolderID="mainContent"Runat="server">

 

<h2>Welcome to the Wrox United Web site.</h2>

<p>We're a great football team. No really, we are. Don't take any notice

of our past performance. We're just unlucky.</p>

 

<wu:news id="News1" runat="server" ItemsToShow="5"></wu:news>

 

</asp:Content>

逐个单击菜单中的不同链接,看看比赛成绩表和固定列表是怎样工作的,同时看代码只有廖廖数行。请注意站点的主题和样式是如何保持一致的,但是现在无法知道这一点是如何实现的。欢迎来到ASP.NET 2.0的世界。从现在开始,它将彻底改变您创建Web站点的方式。稍后您将更详细地了解到隐藏在Wrox United应用程序后面的功能,但首先介绍ASP.NET 2.0提供了哪些功能。

Internet上的World Wide Web(WWW)提供了广阔的互联性。实际上每个使用计算机的人都能够访问网络。但这种随处可见的连接却少有标准可遵循。信息以ASCII字符的形式传递,没有内置的机制实现到机器层代码转换的功能。客户的需求非常少—— 事实上Internet本身并没有任何标准规定浏览器该怎样工作,因此计算机领域同时存在着为不同的操作系统和平台编写的多种浏览器。在2005年,我们很容易忘记Internet是设计用于传递带有图片和链接的静态文本页面的。

15年来Internet编程的发展可以说是这样的一个过程:在不违反设计页面时追求最大简单性的WWW原则的同时,努力向用户提供高级的、复杂的功能。用户希望使用页面的感觉就像使用文字处理和数据库访问等桌面应用程序那样。但这样的复杂程度在最小化配置的情况下要在Web上实现是很困难的。

ASP.NET 2.0从根本上减少了开发复杂Web站点的困难。MicrosoftASP.NET开发小组考察了大量的页面、站点和场景,并在此基础上创建了一组站点所有者的常见目标。这个列表中包含了大约20个目标,包括读取数据、统一的登录和身份验证过程、一致的站点外观以及不同浏览器平台的页面定制。开发小组于是着手编写代码以正确的方法实现这些目标,从而最大限度地减少开发人员的工作量并由Microsoft对代码进行广泛的测试。这些功能包含在ASP.NET 2.0的类(封装好的可供使用的代码集)中。结果非常简单—— 开发人员只需将MicrosoftASP.NET 2.0中开发的组件装配到一起,就可以非常迅速地组合出(而且很容易地维护)一个复杂的站点。开发人员现在只需简单地将一个控件拖放到页面上并在向导中回答一些问题就可以了,而不需要编写数十行的代码(就像在旧版的ASP中所做的那样)。这个控件将为页面产生一些代码,服务器将使用这些代码创建页面的HTML代码,并随后将这些代码发送到浏览器。由于发送到浏览器的是HTML代码,因此除了能显示HTML和执行一些简单的JavaScript脚本之外,并不要求浏览器有什么特殊的功能。任何可以显示HTML代码的浏览器都可以显示ASP.NET 2.0页面。这不仅包括桌面浏览器,还包括PDA、手机和其他设备。

因为在浏览器获取页面之前这些控件的所有代码都运行在服务器上,所以把这些控件称为服务器端控件。本书后面将讨论某些服务器端控件的功能。

Microsoft对使用旧版的ASP创建的站点进行调查,并据此提出了一组由站点程序员实现的常见目标。有些目标实现起来很容易,但是很耗费时间,而其他目标除了对最高级的开发人员以外都过于复杂。总体而言,程序员的解决方案有的非常出色,有的根本就不正确。调查到的有些解决方案不仅非常糟糕,而且开发它们还浪费了大量的时间,因为成百上千的程序员都耗费大量的时间计划、编写和测试完成同样功能的代码。本节将介绍11个目标,ASP.NET 2.0针对这些目标都提供了内置的解决方案。在第3章和其他章节将看到,这些解决方案都是以服务器端控件的形式提供的,这些控件包含了执行各种设置和操作的相应代码。只需把某个控件放置到页面上,设计人员就可以获得以前必须手工编写代码才能获得的功能。

1.3.1  一致性和个性化

Web设计人员倾向于设计两种相互矛盾的特性。一方面他们希望整个站点具有统一的外观。但与此同时,他们又希望在色彩、字体大小和其他特性上对用户提供定制站点的服务。ASP.NET 2.0提供了MasterPage控件,该控件使得一个站点在标题、菜单和链接的布局上保持一致。在这种一致性的范围内,设计人员可以添加一个控件,让用户选择一种用于所有页面的主题风格。

1.3.2  导航

每个站点都需要导航工具,通常有三种形式。用户需要菜单。他们还需要看到自己在站点中的当前位置。最后,他们希望能够容易地向上或向下导航一个层次结构。ASP.NET 2.0支持一个名为SiteMapXML文件。ASP.NET 2.0的控件可以根据站点地图和当前页面的名称显示菜单和其他导航信息。

1.3.3  登录、安全和角色

很多站点都需要登录系统,该系统根据一个列表检查用户的ID和口令,然后决定允许或拒绝用户登录。虽然基本的实现不复杂,但只有很少一部分程序员能够成功地开发一个符合安全要求的登录系统。ASP.NET 2.0提供了一些控件,这些控件可以创建和实现一个比我们当中的大多数人手工编程实现要好的登录系统。除了简单的站点准入功能以外,该系统还提供口令提示功能以及一个创建新用户的系统。另外,可以为用户指定角色,这个角色决定了当该用户查看信息的时候可以获得哪些页面和功能。例如,所有用户都可以查看员工电话薄页面,但只有角色为Manager的用户可以查看修改员工信息的页面。

1.3.4  连接数据

虽然绝大多数动态Web站点都与数据相连,但只有少数设计人员能够成功地实现用户需要的所有功能。在以旧版的ASP创建的站点中,Microsoft注意到在效率和安全方面存在很多问题。而且,即使是最简单的目标也需要编写数行的代码。ASP.NET 2.0通过两组处理数据的控件提供了丰富的数据功能。数据源(Data Source)控件提供连接到数据源的操作。数据绑定(Data-bound)控件获取这些信息并显示为HTML。很多数据源控件都可以连接到几乎所有的数据源,而数据绑定控件则提供用户表格、列表、树和其他表示形式。两组控件相互配合,可以使得用户以按页的方式显示数据,并对数据进行排序和编辑。

1.3.5  代码

几乎每个Web站点都需要用户定制的代码,因为ASP或其他Web站点技术不可能预料到所有业务的不同需求。ASP.NET 2.0支持20多种不同的语言。不论程序员使用的是何种编程语言,代码在执行之前都会被转换为一种单一的中间语言。ASP.NET 2.0控件在服务器上执行,但程序员仍然可以编写在客户端执行的代码(例如Java或其他客户端脚本)

1.3.6  组件化

如果可以互不依赖地创建Web站点的不同部分,那么站点的开发和维护将会变得更简单。传统的ASP依赖于大型的页面,这些页面包含内容、HTMLASP控件和脚本代码。ASP.NET 2.0为把站点分解成多个逻辑部分提供了更加有效的模型和结构。例如,代码通常保存在独立于显示层(文本和HTML标记)的文件中。而且,Visual Web Developer提供向导以简化创建提供数据资源的对象。

1.3.7  Web服务

企业在它们自己的站点上提供信息和服务。例如,福特公司可以在其全球总部通过www.Ford.com站点向用户提供关于色彩和价格的信息。但是在几年前,我们看到其他站点也需要这样的服务。例如,一个本地的Ford经销商也许希望在www.YourLoacalFordDealer.com站点上提供色彩和价格的列表。Web服务允许客户站点(本地经销商)从提供商站点(福特公司总部)那里获取信息。本地经销商使用Web服务可以显示由福特公司站点提供的实时数据,但仍然让用户位于本地站点。ASP.NET 2.0提供一个符合SOAP标准(Simple Object Access Protocol,简单对象访问协议,一种从Web服务请求数据的方式)的完整Web服务解决方案和XML(Extensible Markup Language,可扩展标记语言,一种数据格式)

1.3.8  性能和缓存

设计人员在开发机器上编写好一个页面后,将把该页面编译成一种称为Microsoft Intermediate Language(MISL,微软中间语言).NET 2.0统一语言。然后把它复制到部署机器上。第一次复制时,需要对页面进行更进一步的编译,将其编译成Common Language Runtime(CLR,公共语言运行时),这将针对即将运行该页面的机器硬件对页面进行优化。这个分步编译过程实现了软件的一致性和针对硬件优化的双重目标。两个编译步骤都经受过.NET 2.0小组的严格性能分析。对开发新手而言,最大的好处在于这个编译过程是自动完成的。

ASP.NET 2.0可以很容易地缓存页面,这样就能更迅速地响应后续的请求。缓存的页面将保存在服务器的RAM中,这样在有请求发生时就可以将页面直接发送出去,而不用让服务器重新编译页面。而且,设计人员可以指定只有页面的一部分可以缓存,人们将这个过程称作碎片缓存(fragment caching)。碎片缓存可以加速页面中静态部分的响应速度,同时仍然允许页面中的动态部分根据用户的具体需求产生。如果使用Microsoft SQL Server 7或者更高的版本,还可以选择为页面中与数据相关但很少变化的部分(可能是一个员工列表或零售商列表)使用数据无效缓存(data invalidation caching)。数据无效缓存将把页面保存在缓存中直到从SQL Server收到数据已被更改的消息。ASP.NET 2.0可以缓存一组数据,直到从SQL收到数据已发生改变的消息。SQL Server将通知.NET数据已发生改变,这将触发ASP.NET 2.0重新读取数据。

1.3.9  错误和异常处理

任何Web站点,实际上所有的系统,都需要对错误进行响应。ASP.NET 2.0提供了一个响应错误的系统。响应可以放置在代码中,也可以重定位到一个错误页面。可以为每个错误提供一个错误页面,也可以只为整个站点提供一个错误页面。.NET 2.0 Framework还允许在多个层次上对错误进行处理。如果错误发生在读取数据时,则可以在数据源层处理错误。如果没有进行处理,错误将向上传递一个层次并在那里进行处理。未处理的错误将不断地上传,从而允许设计人员选择在最有效的层次上进行处理。

1.3.10  部署

在以前,部署为WindowsLinux开发的站点需要一系列的设置步骤,这些步骤主要是在主机上注册和配置站点。ASP.NET 2.0小组为XCOPY部署设置了一个目标,其名称来源于一个DOS命令,这个命令将复制一个文件夹和它的所有子文件夹。一个简单的XCOPY命令将把站点从开发机部署到部署主机上。所有的注册操作和机器层的定制都将在第一个请求到达站点时自动发生。

1.3.11  部署工具

虽然编译ASP页面的工具不是ASP.NET 2.0的一部分,但是Microsoft还是花费了相当多的精力改进这些工具,也就是Visual StudioVisual Web DeveloperVisual Web Developer Express。这些IDE(Integrated Development Environments,集成开发环境)允许通过拖放控件的方式创建页面。大多数常见的操作要么是自动完成,要么由向导引导完成。如果需要输入代码,则IDE将为大多数步骤提供智能提示。本书使用可以免费下载的VWD Express工具。

很多人都存有这样的疑问,ASP.NET 2.0和其他与Web相关的术语(通常是术语的首字母缩写)是怎样相互融合的。现在我们将解释清楚这个问题—— ASP.NET 2.0在哪些方面和运行在服务器上的其他软件相互融合?它是什么角色,其他技术又是什么角色?ASP.NET 2.0.NET 2.0 Framework的一部分。.NET FrameworkMicrosoft的商标,该商标包含一组使用Web服务和XML进行Internet互联的软件标准。很多Microsoft的产品都符合.NET标准,包括各种各样的服务器软件、数据管理系统和桌面应用程序。ASP.NET 2.0.NET 2.0的一个子集,这个子集提供创建动态Web站点的软件。该软件以一组类的形式发布,这些类包含各种在Web服务器上执行操作的控件。在页面的日常设计工作中,我们将用到这些服务器端控件。由于ASP.NET 2.0.NET 2.0 Framework的一个子集,因此本书中我们有时使用ASP.NET 2.0的功能,有时使用.NET 2.0 Framework的功能。各种功能之间是完全无缝的。

作为Microsoft的产品,ASP.NET 2.0运行在Windows上。进行开发时,它必须安装在Windows 2000或者更新版本(包括XP HomeXP Pro)的系统上。进行部署时,常用的OSWindows Server 2003或其他针对更高负载设计的Windows OS版本。在Windows中,ASP.NET 2.0Internet Information Server相互配合从硬盘上读取页面并将其发送给请求者。或者,在用于开发的桌面机器上,可以使用一个轻量级的Web服务器Cassini测试ASP.NET 2.0,这个服务器是和VWD这类开发工具一起发布的。

当设计人员使用ASP.NET 2.0控件连接数据时,至少会发生两次交互。数据控件使用一种称为ActiveX Data Objects(ADO.NET)的技术,但幸运的是ADO.NET运行在底层。接下来,这些ADO.NET对象将和数据源交互。数据源可以是Microsoft SQL Server(本书所用的就是这个数据源),或者几乎其他任何包含关系数据库的数据源,例如OracleMySQL,以及非关系数据源,例如XML或文本文件。

Microsoft为多个层次的开发人员提供了创建ASP.NET 2.0Web站点的工具。覆盖范围最广的产品是Visual Studio 2005,这是为专业开发人员提供的工具。一个价格很低,而且只是功能稍弱一点的版本是Visual Web Developer ExpressFront Page仍然可用,但是它的主要功能是编辑静态HTML页面,并且缺少用于简化设计动态的、数据密集的ASP.NET 2.0页面的工具集。在Notepad中创建页面长久以来一直是ASP开发人员的首选方法,而且理论上仍然可以继续使用它;然而,对Web站点和Web页面进行必要的管理使得它成为一个不切实际的、费力的、而且更容易导致错误的工具。

理论上已经介绍得够多了;让我们实际考察一下ASP.NET 2.0。在学习本书的过程中,您将为一个运气欠佳的足球队创建一个完整的网页,这个球队的名称是Wrox United。可以在www.worxunited.net找到已完成的示例,本书后面将介绍这个站点以解释ASP.NET 2.0提供的功能范围。接着在本书的剩余部分,您将在自己的台式机上开发一个同样的站点。对于这个练习,不需要在机器上安装软件。然而,本书的后续部分需要根据附录B介绍的步骤安装好开发机。

本节介绍由作者创建的站点,其地址是www.wroxunited.net,您也将创建这个站点。启动浏览器并打开该站点。

       MasterPageSite Map(站点地图)(在第2章讨论)单击多个页面以观察页面的顶部和左边的统一布局。这种设计的一致性由一个易于实现的功能完成,该功能的名称是MasterPage。其次,请注意在每个页面右下方的红褐色方框,该方框中的内容指示当前页面和该页面的父页面,以及父页面的父页面,直到主页面。这个功能由ASP.NET 2.0Site MapNavigation控件实现。

       服务器端控件(在第3章讨论)浏览Players页面。所有数据都来自两个服务器端控件—— 一个连接到数据库的数据源控件和一个显示信息的数据绑定控件。ASP.NET 2.0页面的大多数行为都封装在服务器端控件中。这包括像左下位置的购物车链接、诸如左上方球队标志的图片,以及左下方登录区的文本框等。

       登录和安全系统(在第4章讨论)在主页上,使用用户名Lou和口令lou@123登录。然后退出。创建身份验证系统可能需要耗费大量的时间和精力,而且即使如此也会经常出现安全漏洞。ASP.NET 2.0提供一个基于多个服务器端控件的简单系统,该系统包括登录和口令验证方案,以及通过电子邮件给出口令提示。

       事件(在第6章讨论)浏览Shop页面,单击一个商品并将其添加到购物车中(当然,这不是真正的购物站点,只是演示而已)。在单击Add to Cart按钮时将触发一个事件,该事件由客户代码处理,主要是创建一个订单并将相应的商品添加到订单中。

       数据读取(在第7章讨论)浏览Players页面,该页面中的姓名和加入日期都是从SQL Server Express数据库中读取的。这个站点上的很多信息都保存在存储数据的文件中,并由ASP.NET 2.0服务器端控件读取。返回主页并观察菜单。就连这些菜单选项都是从一个XML文件中读取的,这个文件包含了站点的地图。

       写数据(在第8章讨论)浏览Shop页面,单击轿车滞销品并单击Add to Cart。这个操作向数据库写入了一条数据。将订单写入数据库的行为是由两个ASP.NET 2.0服务器端控件完成的。站点的设计人员不需要编写任何客户代码。

       隐藏在控件之后的代码(在第9章讨论)从主页单击页面左下方的Shopping Cart链接。我们已经编写了客户代码,这些代码将在页面加载时检查购物车中是否有商品,并根据商品的内容显示正确的数据:要么是空列表,要么是商品列表。虽然ASP.NET 2.0服务器端控件的功能非常强大,但是它们并不能覆盖所有可能的情况。设计人员可以在ASP.NET 2.0站点中的很多地方添加客户代码。

       组件(在第10章讨论)浏览Fixtures页面。虽然数据存储在SQL Server数据库中,但是ASP.NET 2.0页面并不直接读取数据。有一个组件负责读取数据并将数据发送给ASP.NET 2.0页面。这个组件可以在其他Web站点或运行在本地网络上的Windows应用程序中重用。

       角色(在第11章讨论)如果拥有管理权限,则可以登录并看到不同的页面。在本地开发机上安装本站点后,将在第4章实验这个特性。ASP.NET 2.0允许以访客以外的身份登录。不同的用户可以拥有不同的角色,不同的角色拥有不同的权限。这个公共站点只允许几位作者以管理员的身份登录,所以现在不需要查看这个功能。

       电子商务(在第13章讨论)通过菜单浏览Shop页面,单击一些商品,将它们加入购物车。现在单击菜单底部的Shopping Cart并查看其中的内容。这个站点最复杂的部分就是购物车。ASP.NET 2.0没有提供电子商务的解决方案,但是因为ASP.NET 2.0控件包含了非常丰富的行为,所以设计诸如电子商务这样的复杂系统比以前要快捷得多。

       性能(在第14章讨论)

       错误和异常处理(在第15章讨论)

       部署(在第16章讨论)目前我们并不讨论具体的部署。然而,应该记住ASP.NET 2.0站点的部署只需几个步骤。首先将数据库复制到数据服务器上,然后将站点的文件夹及其子文件夹从开发机上复制到新的服务器上。

本节概要地介绍了在阅读本书的过程中将要学习创建的内容。大多数要研究的功能都只需编写非常少量的代码就可以实现。具体的行为由一组服务器端控件执行,这些控件是ASP.NET 2.0的组件,Microsoft把代码隐藏在这些控件中。只需将这些控件放置到页面上并设置各种属性即可。

在观察过公开发布的完整站点之后,现在可以开始在开发机上创建自己的站点了。如果还没有安装Visual Web Developer ExpressSQL Express、示例数据库和示例站点(参考附录B)的话,现在请安装它们。仔细阅读附录B中的介绍,然后按照步骤开始进行安装。可以在每个小节的后面执行检查以保证安装成功。

本章和第2章将在学习怎样使用VWD和为站点设置一些设计参数的时候,搭建出本站点的基本架构。因为VWD对大多数任务都提供拖放的解决方案,所以您将以最少的输入创建这个站点。如果必须进行输入,则可以从在www.wrox.com下载的文本文件中剪切并复制相应的内容。在下载得到的文件中,所有页面都已完成,但我们坚信,与简单地复制我们给出的参考中的整个页面相比,更好的学习方法是自己创建ASPX页面。

人类与动物的一个基本差别在于使用工具的能力。在编写代码的早期,编程工具都很简陋。今天,我们可以享受到高级软件开发工具带来的益处。工程师几乎已经研究了人类所有的弱点(基本上都与记忆能力和人类大脑与世界的接口相关)并创造工具弥补这些弱点。这些工具组合到一起形成一种称为Integrated Development Environment(IDE,集成开发环境)的软件。本书所使用的IDEVisual Web Developer Express(VWD)

VWD包含了很多开发工具。首先是一个编辑器,开发人员将在这个编辑器中创建页面。这个编辑器带有IntelliSense功能,这是一个完成命令输入并为开发人员提供恰当选择的工具。另外,有一个包含图标的工具条,可以将这些图标拖放到编辑器中,这个操作将在编辑器中自动添加一个代码块。另一种向页面自动添加代码的方法是使用处理比较复杂的任务时系统提供的向导。另外,VWD包含了一个最小化的File Manager,用于组织ASPX和相关的文件以及文件夹。类似地,可以使用Data Explorer浏览Web站点的数据源。VWD还包含了一组排查问题的工具。最后,VWD发布时附带了一个用于测试的Web服务器,名称为Cassini,下一节将对其进行介绍。阅读其他相关书籍时,可以发现其他用于处理更为复杂情况的工具,包括在开发小组的成员之间管理代码版本的工具。

1.7.1  Cassini

Cassini是一个VWD附带的轻量级的Web服务器。CassiniIIS(包含在.NET Framework)都可以作为ASPX以及相关页面的服务器,所以在部署时不需要对站点进行修改。但两者之间存在诸多差别。

这两个服务器使用不同的安全模式。IIS是一个服务,而Windows中的每个服务都需要一个用户。IIS的特定用户是ASPNETCassini作为应用程序运行,使用当前已登录Windows的用户账户。这使得Cassini更易于安装,因为不需要在Windows中创建ASPNET这个特殊的账户。事实上,Cassini在安装VWD时就已透明地安装在开发机上了。

Cassini3个弱点。首先,它是开发人员在开发机上测试页面的工具,因此只能有一个用户。其次,由于针对用户模式进行了简化,因此Cassini无法支持可靠的安全模式。Cassini只能在一个封闭的环境中运行,或者能够获得防火墙的保护。再次,在Cassini中运行一个页面时,这个页面在VWD中会被锁定。为了对页面解锁,必须关闭浏览器,这在多次修改和测试站点时是非常不方便的。因此,很多开发人员即使是在开发机上也使用IIS,以免在VWD中修改页面之前必须关闭浏览器。这样做的缺点是必须配置开发机以提IIS、设置正确的权限、建立安全控制、并创建一个虚拟的根目录。附录B中给出了进行这些设置的步骤。若不想设置IIS,仍然可以使用Cassini,只是在修改之间要关闭浏览器。

1.7.2  VWDSolution Explorer

ASP.NET 2.0 Web站点以文件簇的形式保存在硬盘上。开发人员必须能够组织这些文件,包括查看这些文件的名称和它们之间的关系、复制、创建以及删除这些文件。可以在Windows Explorer中查看和操作这些文件。但是在VWDWindows Explorer之间切换很不方便,所以VWD包含了一个类似资源管理器的工具,称为Solution Explorer(解决方案资源管理器),如图1-2所示。Solution Explorer默认情况下显示在窗口的右边,或者可以通过按下Ctrl+Alt+L重现该工具。可以将其看作是Windows Explorer,其最上层的目录就是Web的根目录。注意,Toolbox可能会位于Solution Explorer的后面,图1-2显示了这种情况。

  1-2

任何使用过Windows Explorer的用户对Solution Explorer的布局都会很熟悉。单击加号或减号可以展开或折叠文件夹。工具条上的图标,从左边开始第一个用于在Solution Explorer和属性列表(本章稍后将进行更多讨论)之间进行切换。带有两个水平箭头的图标执行刷新功能。双文件图标将自动隐藏或展开嵌套的子文件。接下来的两个图标用于打开选中的文件并显示其用户界面或代码。双浏览器图标用于将整个站点复制到部署机上。最右边带有一个锤子的图标将打开Web Administrator工具,该工具管理站点的功能。

Solution Explorer的底部可能有一个小任务栏,用于显示Solution ExplorerToolboxData Explorer/Properties窗口。为了让窗口保留足够的空间显示页面的内容,这几个窗口通常会叠放在一起,而选项卡可以让用户进行快速切换。例如,在图1-2中,Toolbox也是打开的(虽然是隐藏在Solution Explorer窗口的后面),单击Toolbox选项卡将隐藏Solution Explorer窗口并显示工具箱窗口。这些窗口严格地说并不是Solution Explorer的一部分,而是属于装载4个叠放在一起的工具的面板。

Solution Explorer的窗口中有一个构成站点的文件列表。最顶层是根目录,通常位于C:/websites/MyWebSiteName。对于WroxUnited站点我们使用了C:/BegASPNET2/Wrox
United
目录。文件包含在子文件夹中。开发人员可以像在Windows Explorer中那样展开和折叠文件夹、在文件夹之间剪切、复制和粘贴。Solution Explorer能够识别.ASPX文件和.ASPX.VB.ASPX.CS文件之间的隐式链接(6章和第9章中将更详细地介绍)。如果复制.ASPX文件,相应的代码文件会一起移动。

可以右击文件夹并选择Add Existing Item。系统弹出的对话框允许开发人员导航到计算机或网络中的任意位置(包括FTP站点)获取文件。例如,在创建自己的项目时,有时候需要使用从www.wrox.com站点下载的图片或文本文件。开发人员可以使用Solution Explorer将该图片或文件从下载文件夹中添加到自己的Web站点中。

ASP.NET 2.0没有包含在部署期间注册文件的系统。所有文件,包括ASPX页面、代码文件、数据文件和图片都存放在一个普通的Windows文件夹及其子文件夹中。如果没有打开VWD,也可以在Windows Explorer中直接剪切、复制和粘贴站点的文件。

与后续小节将要介绍的ToolbarData ExplorerProperties窗口一样,Solution ExplorerVWD中有两种显示模式:浮动模式和停靠模式。浮动模式允许该窗口停放在屏幕上的任意位置,类似于一个基本大小(即未最大化)的普通窗口。停靠模式意味着该窗口将自动停放在屏幕上的以下5个位置之一:顶部、底部、左边、右边或与其他窗口叠放在一起。选中某个窗口,单击菜单Window->FloatingDockable将改变该窗口的显示模式。在停靠模式下,如果拖放窗口的标题栏,开发人员将看到几个透明的箭头(如图1-3所示)。将标题栏拖向某个箭头,该窗口将自动调节大小并停靠在正确的位置上。

在学习了如何使用VWD Express IDE之后,就可以继续学习创建站点和页面的技术了。

  1-3

1.7.3  使用VWD创建、打开和使用Web站点及页面

要创建新站点,只需打开VWD并单击File->New Site菜单。在弹出的向导中,选择ASP.NET Web Site。假设将为开发创建一个本地副本,在File System中设定位置并浏览到该目录。通常设置为C:/Websites/MyWebsiteName(我们实际使用的目录是C:/BegASPNET2/WroxUnited,从而与本书以前的版本兼容)。可以任意选择Visual BasicC#两种编程语言。Visual BasicVWD的默认语言,同时也是本书中所有示例所用的语言。VWD将自动创建一个文件夹、一个默认页面,以及一个存放数据的子文件夹。

ASP.NET 2.0引入了一个非常简单的模型,用于组织Web站点的文件和注册代码。在这种模型下,站点的所有文件都存放在一个文件夹及其子文件夹中。在部署时,整个文件夹将从开发机器复制到主机。因此,开发人员不需要像在以前的ASP版本中那样创建一个虚拟根目录。VWD进一步简化了部署:如果选择菜单Website->Copy WebsiteVWD将打开一个FTP窗口,通过这个窗口,开发人员可以将新文件发送到主机,或者更新主机上的文件。

要编辑一个已经存在的站点,请选择菜单File->Open Web Site。如果是在本机上工作,那么可以浏览到存放站点的文件夹。在屏幕的左边,VWD提供一个菜单让开发人员选择通过FTP或通过安装本地IIS,从而直接修改页面。

在创建了Web站点之后就可以添加页面。我们通常会首先添加一些文件夹以便组织页面。右击一个已经存在的文件夹并单击添加文件夹的选项。特殊的ASP.NET文件夹,例如CodeThemesWeb References,都有自己的菜单项。

要添加一个页面,请右击某个文件夹并选择Add New Item。弹出的向导中提供很多选项。到目前为止,只需创建一个Web Form,但可以看一看其他选项,感受一下VWDASP.NET 2.0的强大功能。为新页面命名并选择使用的语言。后续章节将讨论这两个复选框。在介绍了怎样创建Web站点和页面之后,后面的“试一试”部分将运用这些知识,创建Wrox United站点和一些实际的页面。

1.7.4  示例代码目录

为了便于学习,每一章都有自己的代码,而且每一章有两个文件夹,分别保存在两个上层目录中。其中一个目录是Begin目录,包含让您开始练习的示例—— 这些示例没有任何改动。另一个目录是End目录,包含着“试一试”部分完成之后的示例,因此在练习的时候可以将这些文件作为参考,或者根据练习中的步骤从这些文件中剪切并粘贴代码。

这些BeginEnd文件夹都包含在一个名为Chapters的文件夹中,每章都有自己的目录。所以,本章中让您开始练习的示例位于Chapters/Begin/Chapter01,而完成之后的代码位于Chapters/End/Chapter01。有些章节以WroxUnited应用程序作为示例,因此这些章节有自己的WroxUnited目录,而其他章节使用WroxUnited以外的应用程序作为示例。这样做的原因是有些技术在较小且易于理解的示例中比在一个功能完整的应用程序中更能让人理解清楚。但是所有这些技术都在主应用程序中得以应用。

将目录以这种方式安排并不意味着示例会变得非常大,但这样做的好处是将每一章和其他章节分隔开,以便在阅读本书的时候不至于将各章的代码相互混淆。其中有几个目录包含了完整的WroxUnited站点副本。

除了每一章的代码外,还有一个包含最终示例的WroxUnited应用程序。这个应用程序可能与其他示例有些出入,但差别只是它显示的数据可能更完整一些,同时某些页面看起来更美观一些。

(1) 打开VWD。选择菜单File->New Web Site。选择ASP.NET Web Site并在File System中定位到C:/BegASPNET2/Chapters/Begin;可以使用Browse按钮导航到这个目录,然后在该目录的后面输入Chapter01,因此新的Web站点就位于C:/BegASPNET2/Chapters/Begin/
Chapter01
。确认Language列表中选择的是Visual Basic。单击OK。应该能够在屏幕右边的Solution Explorer中看到自己的文件夹。如果没有看到该窗口,请选择View->Solution Explorer。注意VWD将自动创建3个项目:App_Data文件夹、Default.aspx页面和(如果展开Default.aspx)Default.aspx.vb文件,该文件包含默认页面的代码。

(2) VWD的中间是一块用于编辑页面的空间,Default.aspx页面已经在这里打开。注意在屏幕的左下方有DesignSource两个选择。依次单击可以查看代码和代码运行的结果。在Design视图中,单击页面并输入文本Home Page。按下Ctrl+S保存页面。

(3) 创建一个文件夹,用于保存图片。在Solution Explorer中,右击根文件夹(该文件夹可能显示为C:/…/Chapter01Solution Explorer隐藏了部分路径)并选择Add Folder。将这个新文件夹命名为Images

(4) 可以在VWD之外操作站点的文件和文件夹。打开Windows Explorer并导航到C:/BegASPNET2/Chapters/Begin/Chapter01目录,可以在这里看到VWDSolution Explorer中显示的文件夹和文件。

(5) 返回到VWD,右击新增加的Images文件夹并单击Add an Existing Item。找到保存本书下载代码的文件夹,可能是C:/ BegASPNET2/WroxUnited。打开Images文件夹并选择所有的图片。单击Add按钮将这些图片从下载文件夹中添加到所创建站点的Images文件夹中。

(6) 现在创建第一个页面,该页面显示Wrox United的历史。右击站点的根目录(Solution Explorer顶部的C:/…/Chapter01)并从弹出的菜单中选择Add New Item。选择Web Form模板并将其命名为History。接受其他默认设置。单击Add,切换到Design视图。除了在页面上输入文本之外,也可以从下载示例的文件中复制球队的一小段历史。切换到Windows Explorer并打开C:/BegASPNET2/Chapters/Begin/Chapter01目录。找到名为History.txt的文件,打开该文件并复制几段文本。切换回VWD并将这些文本粘贴到页面中。单击工具栏上的磁盘图标保存该页面。

(7) 按第(6)步的方法创建Mishaps页面,其中包含Mishaps.txt文件的内容。

注意:

请确保所有路径(如:C:/)内没有空格。有时删除单词时会留下一些奇怪的空格。

操作回顾

在这个练习中,您创建了自己的站点和几个页面。使用VWD中的菜单选项创建站点,可以自动获得一些标准的文件夹和文件。可以将站点保存在Microsoft推荐的C:/Websites目录下,也可以保存在其他位置,例如本书就将站点保存在C:/BegASPNET2/—— 这样做的原因是要将示例和您创建的Web站点相互区别开。如Images文件夹所示,可以在根目录下添加子文件夹以便组织文件。

VWD中创建页面时,有多个模板可供选择。您选择的Web FormASP.NET 2.0的标准空白页面。通过剪切和粘贴可以把文本从其他文件复制到页面中。

您还了解到在VWD中不需要特殊的文件索引或存储机制。所有文件都保存在硬盘上,并由Windows的文件夹进行组织。然而,在可能的情况下,最好是在VWD中创建和添加文件,以保持Solution Explorer和其他VWD功能与所做的修改能同步更新。

1.7.5  运行页面

页面创建完成之后就可以供用户使用了。因为服务器实际上执行服务器端控件中的代码以创建最终的HTML页面,所以提供页面的过程也称为运行页面,就像运行程序一样。VWD有一个绿色的箭头图标可以启动运行,也可以按下F5,或者选择Debug->Run运行页面。VWD接下来执行如下步骤:

(1) 站点的所有页面编译成Microsoft Intermediate Language(MSIL),编译结果及其支持文件保存在一个程序集中。此时开发语言(例如VBC#)之间的差异已经消失,因为结果是MSIL。然而,不能优化即将运行页面的硬件。

(2) 程序集是Just In Time(JIT)格式—— MSIL编译成Native Code(本地代码),这种代码将根据运行页面的机器进行优化。

(3) Cassini中打开页面时,该页面在VWD中的Design视图将被锁定,以防对页面进行修改。

(4) VWD启动Cassini,浏览器自动打开并向Cassini请求页面。

提示:

初学者常犯的一个错误是,当由Cassini提供的页面仍在浏览器中处于打开状态时,却试图在VWDDesign视图中修改该页面。

随着站点的增长,您会发现编译所用的时间会越来越长。可以按下Ctrl+F5编译并运行单个页面。在下面的“试一试”部分,将练习运行HistoryMishaps页面,这两个页面是在前面的“试一试”部分创建的。

(1) VWDSolution Explorer中双击History.aspx文件打开它(如果它还没有打开的话)

(2) 单击工具栏上的Run图标(绿色箭头)。如果有弹出消息询问是否添加一个带有DebugWeb.config,接受该建议。注意浏览器已打开并显示History页面。

(3) Windows的系统托盘中,有一个黄色的页面图标,该图标指示Cassini正在运行。双击它,将看到它正指向您的Web站点。关闭浏览器,从而让Cassini对页面解锁。

(4) 返回VWD并打开Mishaps页面。这一次,在启动运行页面的时候注意观察VWD的左下角。可以看到一条消息显示编译已开始,并能看到错误列表框。在浏览器中查看Mishaps页面之后,切换回VWD。注意该页面(Design视图中)处于锁定状态。

操作回顾

本节重点介绍在VWD中运行页面。可以通过单击绿色箭头启动运行。这个操作将启动Cassini。它还会打开浏览器并向Cassini请求页面。一旦开始运行,就可以在Windows的系统托盘中看到该服务器的图标。

1.7.6  设计区

VWD界面的中间部分是设计区(Design Surface)。开发人员将在这里完成向ASP.NET 2.0页面添加内容的大部分工作。可以在Design视图和Source视图之间切换,前者在一个类似浏览器的窗口中显示页面的直观效果,后者显示页面的代码(如图1-4所示)。通常,Design视图中完成大多数任务要容易和迅速一些,因为它支持较多的拖放功能。如果需要进行细微的修改,而这些修改无法使用VWD的拖放界面完成,那么可以切换到Source图。

  1-4

当在Design视图中向页面添加控件时,会弹出一个Common Tasks Menu(常见任务菜单)。这个最小化菜单包含了控件的大多数最常用的设置特性。并不是所有的控件都带有智能任务面板(常见任务菜单),但如果有的话,可以通过控件右上角的黑色三角图标(如图1-5所示)打开和关闭该面板。

  1-5

设计区的很多默认设置可以通过菜单Tools->Options修改。当程序员在VWD中打开页面进行编辑的时候,这些选项会改变页面的外观。这些设置并不会改变Web站点的访客看到的页面外观。可以选择在Design视图或Source视图下创建新页面,以及选择智能任务面板的自动打开功能。可以修改Tab键和缩进(indent)包含的空格数量,这有助于使得项目符合公司有关页面代码的规范。

在设计区的底部有一个导航工具,它在大型、复杂的文档中很有用。通过阅读导航标记可以知道插入条(光标)当前位于何处。当前的设置将突出显示,如图1-6所示。也可以单击某个标记,从而在设计区选中该标记的所有内容。

  1-6

从很多方面看,设计区都非常类似于字处理器。但是VWD还提供了两种用于查看页面的视图(DesignSource)以及在页面中导航的增强工具。下一节讨论VWD怎样帮助开发人员在页面中添加功能。

1.7.7  工具箱

VWD在工具箱中提供了ASP.NET服务器端控件集,以便于将这些控件拖放到页面上。第3章将详细讨论各种服务器端控件以及它们的使用方法;这里只需要大概了解怎样使用工具箱就可以了。要显示工具箱,可以选择菜单View->Toolbox或按下Ctrl+Alt+X。随后,可以拖动它的标题栏将其移动到新的位置。在向不同位置拖动工具箱时,将显示一个罗盘图标,允许将工具箱向上、向下、向左或向右拖动,或者拖放到另一个窗口的上面。如果希望最大化设计区的面积,则可以将Solution ExplorerToolbox叠放在一起。

工具箱由一些面板组成,其中一些相似的控件组织在面板上。可以展开面板显示工具,也可以折叠面板以节约空间。在安装VWD时可以改变工具箱所包含的控件,但是一个典型的工具箱包含以下几个面板:

       Standard包含大多数ASP.NET 2.0服务器端控件。

       Data包含数据源和数据绑定控件。

       Validation如果用户输入在可接受的值的范围之外,则该面板所包含的控件将拒绝用户的输入。

       Navigation包含菜单和breadcrumb等导航控件。

       Login包含身份验证控件。

       WebParts包含站点中可由用户重新安排或隐藏的比较大的组件。

       HTML包含常用的(ASP)标记。

       General可由用户定制的工具组。

1-7显示了可能出现在屏幕上的工具箱。

单击面板的加号图标将展开一组可用的控件列表。图1-8显示了将LoginStandard面板展开的工具箱。

     

  1-7                         1-8

General面板一开始是空的。在创建了页面的一部分之后,可以选中该页面并将其拖放到General面板,从而创建一个可复用的工具。如果希望复制一组已调整好格式的控件到其他页面,则这个工具将非常有用。

在工具箱标题栏的右边有一个图钉图标,如图1-9所示。单击该图标,它将变为水平方向,意味着在没有用到工具箱时它将自动隐藏起来,而仅仅显示标题栏。

  1-9

提示:

工具箱的外观在使用过程中是变化的。例如,每个面板的标题在选中它们时改变。

当鼠标移动到工具箱的标题栏上时,工具箱将弹出来供开发人员使用。如图1-10所示。

  1-10

在下面的“试一试”部分,将练习使用VWDDesignSource视图,以及工具箱的功能。

(1) VWD中继续编辑Mishaps页面。

(2) 切换到Design视图。在工具箱中展开HTML面板并滚动到该面板的底部。将Horizontal Rule控件从工具箱拖放到页面上(任意两个段落之间)

(3) 下一个目标是在History页面的底部添加一个日历控件。打开工具箱的Standard面板并找到ASP.NET的日历控件。将其拖放到页面上(双击该工具将执行同样的操作)。单击选中该控件并注意其右上角指向右边的小箭头图标。单击该图标显示智能任务面板。单击Auto Format,选择一种格式,并单击Apply。注意观察使用VWD的对话框界面一次性地修改众多显示标准是多么容易。

(4) VWD中打开History页面。以Design视图查看该页面。将光标移动到以<%@Page…>开始的标记之前。注意导航向导(在设计面板的底部)显示当前光标位于<Page>标记中。单击<Page>标记,将选中设计面板内该标记的所有内容。

操作回顾

如您所见,工具箱提供向页面拖放各种元素的功能,就像拖放HTML控件Horizontal Rule一样,而不是输入元素的标记。即使是像日历这样复杂的结构也可以拖放到页面上。将控件添加到页面之后,可以使用智能任务面板对其进行修改。

1.7.8  属性窗口

一个对象,例如Web页面、服务器端控件ListBox或者一个到数据源的连接,都具有很多属性(properties)。属性是一组设置,决定着对象的外观和操作。在早期的ASP版本中,很多目标的实现都需要编写大量复杂的代码。然而,在ASP.NET 2.0中,Microsoft已预先编写了大部分的代码并将这些代码封装在服务器端控件中。属性决定了如何执行行为。对象的属性可能非常简单,例如BackColor,也可能非常复杂,例如EnablePaging。同样,赋予属性的值可以非常简单,例如一个简单的BLUE值,也可以非常复杂,例如一个多行的SQL语句。可以在Source视图中直接输入属性的值,也可以使用Properties窗口为属性赋值,如图1-11所示。

  1-11

可以按下F4或选择View->Properties菜单显示属性窗口。属性显示在多个面板中,可以展开或折叠这些面板(类似于工具箱)。例如,在图1-11中,顶部的3个面板就是展开的。在属性窗口的顶部有一个下拉列表框,其中包含了当前打开页面上的所有控件。下面的两个图标用于按类型或按字母顺序排列属性。闪电图标将使得属性窗口显示事件(在第6章讨论)而不是属性。属性窗口左边的列表中显示属性名称,右边的列表中显示属性的当前值。窗口的底部有一个文本框,显示当前选中属性的帮助信息。

修改属性的基本技术是选择一个对象,通常是一个控件,然后找到需要修改的属性并对其进行设置。可以在Design视图中单击对象从而选中该对象,或者在Source视图中将插入条放置在对象中。另一种方法是在属性窗口顶部的下拉列表框中选择对象。一种常见的错误是,在没有实际选中某个对象之前就试图修改其属性。这实际上修改的是原来已选中的对象的属性。

有多种方式可以修改一个属性的值。如果属性所允许的值数量有限(例如falsetrue),则可以双击属性的名称从而在这些值之间切换。如果可选的值比较多,但数量仍然有限,那么将这些值保存在一个下拉列表中。有些属性具有很多选项,在属性值的右边有一个椭圆形的按钮,单击该按钮将弹出一个对话框,可以从中选择所需的值。最后,有些属性可以接收字符串,所以它们的值保存在文本框中。如果能在属性值中进行选择或者切换,那么最好不要用输入的方式为该属性赋值。在修改完成之后,必须按下EnterTab键,或者单击其他属性,才能最终设定属性的值。此时Design视图将显示出所作的修改。

也可以在Source视图中直接输入属性的值。将插入条放置在某个标记内并单击空格键以调用IntelliSense显示一组在插入条处可以插入的属性。输入属性名的前一个或前两个字母,然后输入一个等号。IntelliSense功能将显示属性的所有合法值(如果数量有限的话),再次输入所需属性值的前一个或前两个字母。按下空格键结束输入。注意,如果可能属性值的范围不是有限的,则没有值列表。例如,值为SQL语句的属性就没有IntelliSense功能,开发人员必须输入SQL语句。

1.7.9  错误列表窗口

在程序出现问题时,主要有两种方法可以查看该问题。首先是发送到浏览器的页面错误报告,其次是VWD中的Error List窗口。

如果Web.config文件中包含下面阴影部分的代码,那么ASP.NET 2.0将把与页面相关的错误报告发送到浏览器(如图1-12所示)

  1-12

<system.web>

<compilation debug="true">

</compilation>

注意,在第一次运行(F5)页面的时候,Web.config中默认的设置是<compilation debug="true" strict="false" explicit="true"/>

由于默认为true,因此在没有特殊设置的情况下调试开关是打开的。所以下面的示例中debug=true并没有改变默认设置。当然,通过将调试开关设置为true,可以帮助开发小组中其他可能会查看设置的程序员:

<system.web>

<compilation></compilation>

如果页面上存在致命错误,那么运行该页面时浏览器中将显示一个以黄色和白色为主色调的页面。在黄色部分的下面是引发错误的文件名称和该文件中包含错误的行号。所有错误的情况都一样,具体的错误可能只是与该行号相关,但这应该是一个很好的线索。注意,在部署站点的时候,应该将Web.config文件中的debug命令设置为false以提高性能,并减少提供给黑客的信息。第15章将深入讨论错误处理。

识别错误的第二种方法是在VWD内部使用Error List窗口,如图1-13所示。默认情况下,这个窗口只有在运行页面的时候才会显示出来。可以通过菜单View->Error List强行显示该窗口。该窗口显示在将页面转换成MSIL时遇到的所有问题。

  1-13

注意在Error List窗口的顶部有3个图标:ErrorsWarningsMessages,单击这些图标将显示在编译页面时创建的不同项列表。隐藏某个类型的项并没有把它们从列表中删除;这样做只是使得列表比较短而已。从左边开始的第二列标识错误发生的顺序。

错误(Error)使得整个页面,或者页面的某个部分运行失败。这包括,例如,引用不存在的对象。

警告(Warning)是一些在编译页面时VWD可以解决的问题(例如,缺少结束标记)

消息(Message)是程序员包含在代码中的文本,当IIS编译页面时这些消息会显示出来。

在查看项列表的时候可以单击某个列的标题进行排序。如果按住Shift键单击另一个列标题,这将使得在第一个列中具有相同值的数据项按照第二列的值再次进行排序。另外,通过拖动列标题之间的分隔线可以调整每列的大小,或者通过左右拖动列名称来重新排序。双击某个数据项可以将光标定位到导致该消息产生的代码行。

在下面的“试一试”部分中,将练习修改History页面上的一个图片控件的属性。接着制造一些错误并观察结果。

(1) Design视图中打开History页面。在Solution Explorer中,打开Images文件夹并将名为logo-yellowjpeg文件拖放到History页面的顶端。VWD将自动创建一个图片,并将该图片的源地址设置为前面的jpeg文件。

(2) 单击该图片从而选中它,然后切换到Properties窗口(或按下F4打开该窗口)。将图片的高度从447修改成100并按下Enter设定该值。您将看到,所作的修改将在设计面板中立刻反映出来。

(3) 现在从Source视图中修改属性。找到<img>控件并找到其中的高度属性。将该属性的值从100修改为300。单击绿色箭头(或按F5)运行页面以查看结果。

(4) 关闭浏览器并返回到Source视图。找到<img>标记并将光标定位在height=300”的闭引号后面,单击空格键。这将调用IntelliSense工具显示所有在这个位置可以使用的属性列表。按下t键然后按下i键从而使列表移动到Title属性。按下等号(=)关闭IntelliSense工具并输入“Wrox Logo In Yellow”,注意输入的内容包括开引号和闭引号。运行页面,在浏览器中将鼠标移动到图片上时,可以看到刚才创建的标题。关闭浏览器。

(5) 接下来引入一个非致命(non-fatal)错误。在Source视图中打开History页面并找到页面顶部的<h1>标记。将<h1>标记修改成<H1xx>并运行页面。在浏览器中,可以看到“Wrox United-a potted history”文本没能以一号标题的样式显示。关闭浏览器并切换回VWD观察Errors List窗口。如果该窗口不可见,则使用菜单ViewError List显示Error List窗口。可以看到在列表中有两个错误。第一个错误指出不支持第3行的“h1xx”。第二个错误指出第4行的</h1>闭标记没有匹配的开标记。

(6) 最后引入一个致命错误。在Source视图中,滚动到页面顶端并将第一行的Language=VB”修改成Language=Esperanto”,然后运行页面。注意前面的等于号两端都没有空格。

(7) 在本书的各个章节中,将练习解决各种各样的错误。目前,只需删除<img>标记、将<h1xx>恢复为正确的<h1>标记并将语言修改回VB即可。

(8) 保存页面。

操作回顾

在此使用了三种修改属性的方法。第一种是在Design视图下工作并在Properties窗口中输入新的属性值。接下来是在源代码中直接手动输入属性值。最后,使用IntelliSense工具为一个已经存在的控件添加属性。

可以观察到两种类型的错误:致命的和非致命的。如果是第一种错误,那ASP.NET 2.0仍然可以显示页面,即使错误的标记<h1xx>使得文本以默认样式而不是一号标题样式显示。虽然页面可以显示,但是返回VWD可以看到Error List窗口记录了两条错误消息。通过将编程语言修改成一种不支持的语言,引入了一个更加严重的错误。ASP.NET 2.0无法克服这个错误,因此看到了两个结果:在浏览器中显示带有错误排查信息的错误页面,在VWD中错误列表显示多条错误。

1.7.10  VWD的数据库浏览器

当开始处理数据的时候(在第7章和后面的章节中),可以使用VWD中的工具获得数据源的信息。这些信息包括具体的表名称和列名称。实际上,将在本书的后续章节中看到,可以把表列拖放到设计区,VWD会自动设置恰当的控件显示表列中的数据。目前,只需了解在Solution Explorer中双击Access MDB的名称就可以在Access中打开该文件(假设已安装了Access)。对于SQL Server数据库(如本书所示),可以使用工具Database Explorer更详细地查看数据库并修改其中的数据和属性。附录D中详细讨论了这些功能。

Microsoft2.0版本中对ASP.NET做了很大的改动。最大的好处是,以前需要编写客户代码才能完成的任务现在只需向页面拖放预建好的控件即可。这些预建控件包括用户登录工具、导航工具、数据库连接工具、数据显示工具、创建一致的站点外观的工具、以及向用户提供定制选项。开发人员现在可以更快速地开发更加健壮的动态页面。除此之外,Microsoft还简化了2.0版本的部署,并提高了它的性能。与旧版的ASP一样,代码只在服务器上执行(也就是指编译动态页面),发送给浏览器的只有标准HTML代码。因此,ASP.NET 2.0和所有的浏览器都兼容。

Microsoft为使用ASP.NET 2.0创建页面提供了3个工具。其中的一个是本书所用的Visual Web Developer Express(VWD)VWD可以显示站点页面的组织情况,并帮助开发人员创建新页面或修改已经存在的页面。VWD还附带了一个轻量级的Web服务器Cassini,用于测试页面。在创建页面之后可以单击Run图标,VWD将启动Cassini、打开浏览器、编译页面并将该页面发送到浏览器。本章还讨论了以下内容:

       VWD提供多种查看和处理页面的方式。可以通过选项卡在Design视图(显示页面的外观)Source视图(显示页面的标记和源代码)之间切换。

       在创建新站点或添加页面时,VWD提供向导和模板帮助开发人员完成常见的设置。本章介绍了如何使用模板创建新页面,接着介绍了工具箱。工具箱中包含了很多预建对象,这些对象在以后各章创建页面时都是学习的重点。为了组织工具箱,各种工具按组存放在不同的面板中。

       另一个窗口显示当前选中对象的属性。例如,可以选中一个文本框,然后查看它的大小、背景色和其他各种属性。本书的后续章节将详细讨论ASP.NET 2.0支持的各种对象的属性。

       VWD中执行Run命令时将编译页面,开发人员可以获取编译过程的反馈信息。致命错误、潜在问题的警告信息都将被列举出来。双击某个错误可以将光标定位到产生该错误的代码行。

本章主要是介绍ASP.NET 2.0以及怎样使用VWD创建第一个页面。第2章继续介绍ASP.NET 2.0的一些功能,这些功能控制着页面的外观。

(1) 解释.NET 2.0 FrameworkASP.NET 2.0VWDIIS之间的差别。

(2) 列举CassiniIIS之间的差别。

(3) 在拖动工具栏的标题栏时它将定位到屏幕上的某个位置并重新调整大小。怎样才能把标题栏拖放到预定的位置?

(4) 怎样将位于C:/MyPhotos.jpg文件复制到站点中以便在页面上显示该图片?

(5) 您希望为站点添加一个子文件夹,但Add Items菜单中没有Folder选项。这是为什么?

(6) Microsoft编写了大量的代码以简化程序员创建页面的工作。程序员实际上是怎样使用这些代码的?

(7) 为什么在ToolboxGeneral面板中没有任何工具?

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值