ASP.NET 2.0入门经典2

更新时间:2023-06-08 13:19:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ASP.NET入门经典

2.0入门经典(第4版)

2.1 总体设计目标

在开始开发Web站点之前,通常应该设想好站点所具有的功能;例如,一个博客(blog)站点,必须能够对帖子进行分类存储、向帖子添加评论,还需有进行管理的模块,这些是最少的功能。另外,考虑一个简单的零售商店,它想进入电子商务领域,它希望通过Web站点让客户浏览并购买商品。在着手开发任何一个站点之前,都必须仔细地考虑和设计,之后才能编写代码实现站点。

在开始讨论具体技术的实现时,我们应先讨论如何使用 2.0服务器端控件所支持的功能开发设计良好的站点。毕竟,创建、使用和维护经过良好设计的站点要容易得多,而且维护费用更低。

本章将介绍以下概念:

● 怎样启动站点的设计流程,并在开始编写代码之前考虑站点的所有需求。

● 使用Master和Content页面实现站点的一致外观,这是 2.0最重要的新功能。 ● 创建站点地图,该地图表明站点中存在哪些页面,以及这些页面在层次上与其他文件是什么关系。

● 使用Web.config和Global.asax文件保存数据和代码的全局配置,这些配置将用于站点的所有页面。

在本章的结束部分有一些练习可以帮助加深对这些概念的理解。

1.1 总体设计目标

设计一个功能完整的Web应用程序是一项很复杂的任务。如果是开发自己的站点,可能对站点是什么样子考虑得已经很多很具体了,所以在开始编写代码之前知道自己要做什么。然而,如果是为客户开发站点,就必须确保在站点的设计上与客户在各个细节上达成高度的一致。在一个专业的开发环境中,这个过程通常包括如下步骤:

● 开发一个功能模型,该模型描述站点的具体运行情况。当用户单击Log In按钮时会发生什么事情?当用户想浏览产品时哪些功能是可用的?在开始设计之前,需要回答这些问题以及其他很多问题,以免最后开发出来的站点不是客户想要的!

● 确定在实现站点的过程中可以使用的技术。很多主机软件包对数据库的支持都有不同程度的限制,进而限制站点的总体大小,所以要尽早讨论这个问题并确保能使用所希望使用的技术。

ASP.NET入门经典

● 开发一个技术说明书,描述怎样实现所需的功能。例如,对于博客站点,当用户单击按钮发布新帖子的时候,如何确保将用户输入的文本保存到数据库中?描述要尽可能地详细,因为以后维护这个站点的人很可能不再是当初的开发人员。

这似乎需要做很多工作,但即使是对比较小的企业或者单个贸易承包人,遵循这个流程将帮助开发人员和客户保持良好的合作关系,并为将来和客户以及客户的朋友或商业伙伴继续合作打下基础。

从一旦业务端进入实现阶段,就要开始考虑如何实现这个应用程序,如何使得站点的设计符合客户的需求。创建Web应用程序并不仅仅要求能正确地使用 2.0服务器端控件,因为网页的具体设计和布局也同样重要。

注意,术语设计(design)有两层意思。第一层意思是对色彩和布局做出选择,这通常由站点的美工人员完成。第二个定义包括站点的智能结构和各个部分之间的协作关系。这包括为信息的体系结构制定计划;作为开发人员,您希望在关系数据库中保存尽可能多的信息。本章专注于第二种定义。下一章介绍怎样混合使用HTML和控件设计站点中的每个页面。

Wrox United示例站点的如下几个总体设计目标是在本章中实现的:

● 在开发过程中尽可能使排查问题变得容易,以便简化追踪错误的过程。

● 设置站点在部署后处理错误的标准。

● 为所有页面创建一致的外观。

注意:

其他总体设计目标将在本书的后续章节中讨论,包括鉴别会员的登录系统界面(第4章)、为站点设置统一的样式和主题风格(第5章)和在数据库或XML数据文件中获得尽可能多的信息(第7和第8章)。

2.2 Master和Content页面

站点具有一致的外观有很多好处,在Internet上很少看到没有统一布局的站点。统一的布局通常包括以下内容:

● 一个公共标题和整个站点的菜单系统。

● 页面左边的导航条,提供一些页面导航选项。

● 提供版权信息的页脚和一个用于联系网管的二级菜单。

这些元素将显示在所有页面上,它们不仅提供了最基本的功能,而且这些元素的统一布

ASP.NET入门经典

局也使得用户意识到他们仍处于同一个站点内。虽然这种外观可以使用在HTML中包含文件的方式创建,但是 2.0通过Master和Content页面机制提供了更强健的工具。

Master页面定义了所有基于该页面的网页使用的布局。它是页面布局的最高控制,指定了每个页面上的标题应该多大、导航功能应该放置在什么位置、以及在每个页面的页脚中应该显示什么内容—— 有些类似每个页面的形状切割插件(cookie cutter)。Master页面包含了一些可用于站点中所有页面的内容,所有可以在这里定义标准的版权页脚,并将站点的主要图标放置在页面的顶部。一旦定义好Master页面的标准特性之后,接下来将添加一些占位符(placeholder)—— 页面上的命名区域,这些区域将包含不同的页面。

每个Content页面都以Master页面为基础,开发人员将在这里为每个页面添加具体的内容。Content页面包含文本、HTML和位于<asp:content>标记内的控件。当关于某个Content页面的请求到达时,该Content页面将和它的Master页面的一个副本组合到一起,由Master页面中特定的占位符包含Content页面的内容。然后完整的页面将发送到浏览器,如图2-1所示。

图 2-1

幸运的是,构造这一体系的重担由 2.0承担;开发人员只需创建下面两个小节中讨论的Master和Content页面即可。

2.2.1 创建Master页面

要创建Master页面,可以在VWD的Solution Explorer中右击根目录,选择Add Item,并将类型指定为Master Page。默认情况下,新Master页面的名称是MasterPage.master,位于站点的根目录中。Master页面由三部分组成。

ASP.NET入门经典

首先是一些基本的标记(tag)和标志(例如Master页面的标志,DOCTYPE、xmlns、html和head标记),所有已显示出来的页面都会包含这些内容。这些内容在Master页面中只输入一次,以减少重复工作。DOCTYPE和xmlns指示服务器可以从何处查看页面中所使用的标记的定义。注意这些标记不会出现在Content页面中:

<%@ master language="VB" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="/1999/xhtml">

<head id="PageHead" runat="server">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta http-equiv="Content-Language" content="en-uk" />

<title>Wrox United</title>

<link rel="stylesheet" type="text/css" href= "site.css" runat="server"

/>

</head>

其次,Master页面中有一个用于存放脚本的区域,这些脚本可以在所有的页面上运行(例如,Page_Load的代码,该事件在页面每次加载的时候都会运行),例如:

<script runat="server">

Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

' ...

End Sub

ASP.NET入门经典

</script>

第三,Master页面包含一些HTML布局、开始/结束标记<asp:content… ContentPlaceHolderID=“xxx”>和</asp:content>。包含在Content页面中的内容将放置在这些标记之间。例如:

<body>

<form id="mainForm" runat="server">

<div id="header">...</div>

<div id="sidebar">...</div>

<div id="content">

<asp:contentplaceholder id="mainContent" runat="server" />

</div>

<div id="footer">

<p class="left">

All content copyright &copy; Wrox Press and its subsidiaries

2004.</p>

</div>

</form>

</body>

</html>

总结一下,每个Master页面都必须包含如下元素:

● 基本的HTML和XML输入标记

● 第一行是<%@master…%>

● 带有ID的<asp:ContentPlaceHolder>标记

现在,Master页面可以作为容器包含其他页面了。下一节中将创建一些Content页面。

ASP.NET入门经典

2.2.2 创建Content页面

与 2.0一样,VWD也减少了开发人员的输入。在Solution Explorer中,右击根目录并选择Add New Item。通常选择Web Form;Content页面没有特定的模板。注意对话框底部的Select master page(如图2-2所示)复选框。当选中该复选框并单击Add按钮时,VWD将显示另一个对话框,询问为新的Content页面选用哪个Master页面。

图 2-2

在如图2-3所示的对话框中,开发人员可以选中要使用的Master页面。选中Master页面(通常命名为MasterPage.master)并单击OK。

图 2-3

VWD在这个Content页面中设置了两个值。在Design视图中看不到这两个值,但切换到Source视图就可以看到它们,如下面的代码所示。首先,所使用的Master页面将在第一条指令中说明。其次,VWD将在这个页面中放置一个<asp:content>控件,该控件的ID和Master页面中占位符的ID相同。一个Master页面中可能会包含多个可以插入Content页面的位置。指示符表明哪个占位符将由这个特定的页面填充。

<%@ Page Language="VB" MasterPageFile="MyMasterPage.master" %>

<asp:Content ID="Content1"

ASP.NET入门经典

ContentPlaceHolderID="Content Place Holder ID in Master Page"

Runat="Server">

... content goes here

</asp:Content>

总结一下,一个Content页面包含如下特性:

● 没有HTML的<!DOCTYPE HTML…>标记和XML的<html xmlns=…>标记

● 第一行的<%@ page MasterPageFile=…%>指示 2.0应使用哪个Master页面

● 包含一个<asp:content>标记

理论上并不难,而且代码由VWD自动添加。在下面的示例中,可以看到Master和Content页面的相互协作。

2.2.3 Master和Content页面的示例

本书中的所有练习基本上都可以在Design视图中完成(不用直接处理代码)。但是切换到Source视图查看VWD如何创建页面是一件很有趣的事情。下面显示的代码是一个公司的Master页面(名为research.master)和一个名为mission statement的Content页面示例。第一行阴影代码指示Master页面,在第二个阴影部分是一个控件,该控件定义了一个内容占位符,Content页面的内容可以插入到这个占位符中:

<%@ Master Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

"/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="/1999/xhtml" >

<head runat="server"> <title>CorporateMaster</title></head>

<body>

Corporation Name

ASP.NET入门经典

<form id="form1" runat="server">

<div>

<asp:contentplaceholder

id="ContentPlaceHolderMissionStatement"

runat="server">

</asp:contentplaceholder>

</div>

</form>

</body>

</html>

下面是该示例中Content页面的代码。灰色部分指示了Master页面和描述插入到Master页面中的内容的控件。ContentPlaceHolder的ID必须匹配Master页面中的ContentPlaceHolder的ID。下面的代码是完整的;页面的顶部不包含其他标记或属性:

<%@ Page Language="VB" MasterPageFile="~/research.master" Title="Untitled

Page" %>

<asp:Content ID="Content1"

ContentPlaceHolderID="ContentPlaceHolderMissionStatement"

Runat="Server">

Our Mission Statement is to provide value to the customer.

</asp:Content>

注意Content页面必须包含一组最小化的标记。Content页面中没有<!DOCTYPE>或者<html xmlns=“/1999/xhtml”>等标记,也不会包含<head>信息。这些数据由Master页面提供。

ASP.NET入门经典

2.2.4 在Master页面中使用级联样式表

在Master页面中声明到级联样式表(Cascading Style Sheet,CSS)的链接是一个不错的选择。CSS是HTML的特性,而不是 2.0的特性,所以本书没有深入讨论这个主题。然而,CSS将在第5章中和相关主题一起讨论。在附录E中还有HTML和CSS的简单参考。简而言之,CSS包含了用于页面和控件的各种样式的格式,因此页面在显示时,其上面的所有元素、文本和按钮以及链接的风格等等,都会根据CSS中定义的格式显示。有了CSS,设计人员就可以少用(并维护)很多使用很频繁的单个样式格式标记。CSS还可以加快页面的加载速度,因为CSS在浏览器中只加载一次,当需要重复使用时,可以直接使用保存在客户端缓存中的CSS。在一个Master页面中,应该在<head>部分包含一个类似如下的链接(灰色部分代码)从而将页面和CSS链接在一起:

<head id="PageHead" runat="server">

<title>Wrox United</title>

<link rel="stylesheet" type="text/css" href="MySite.css"

runat="server" />

</head>

在下面的“试一试”部分,您将有机会创建Wrox United站点的Master页面。在本书每一章的练习中,您都将为站点添加内容和功能。现在只需要简单地创建Master页面的架构。在本书的后续章节中将为Master页面添加其他部分,所以现在该文件看起来还不是很完整,暂时不用关注这个问题!

(1) 打开本章的示例站点,目录是C:\BegASPNET2\Chapters\Begin\Chapter02。首先导入一个作者创建的CSS文件。右击站点的根目录并选择Add Existing Item,如图2-4所示。

ASP.NET入门经典

图 2-4

(2) 导航到存放本书下载文件的文件夹(C:\BegASPNET2\WroxUnited),选择site.css并单击Add。CSS是HTML的主题(不是的),但是如果打开该文件,将可以看到为HTML编写的样式集,例如<h1>、<h2>等。不必修改该文件。可以看到在Solution Explorer内显示的文件列表中已经包含了文件site.css。如果打开了这个CSS文件,请关闭它。

(3) 再次右击根目录,但这次选择Add New Item并使用Master Page模板。将该页面命名为site.master。确保Select master page复选框没有选中(这个选项只用于Content页面)。在VWD创建该页面之后可以在Design视图中查看它,不过现在它是一个空页面。注意,在Source视图中可以看到VWD已经添加了几个标记和控件(查看如下代码)。第一个标记是一个指示符,表明这是一个Master页面,而第二个标记是普通的文档类型指示符。接下来是一个插入脚本代码的位置,然后是一个XMLNS值。可以看到,VWD在<body>标记内创建了一个contentplaceholder控件:

<%@ master language="VB" debug="true" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

ASP.NET入门经典

<html xmlns="/1999/xhtml">

<head id="PageHead" runat="server"> ... </head>

<body>

<form id="Form1" runat="server">

<div>

<asp:contentplaceholder id="mainContent" runat="server" />

<div>

</form>

</body>

</html>

(4) 可以修改表单(form)的名称,把由VWD产生的普通名称修改为更适合自己情况的名称。切换到Source视图并将<form id=“form1”runat=“server”>修改为<form id=“MainForm”runat=“server”>。

(5) 切换到Design视图设置样式表。在Properties窗口的顶端,打开控件下拉列表并选择Document。在属性列表的底部找到Style Sheet(如图2-5所示),单击椭圆形的按钮,并找到site.css。单击OK。

ASP.NET入门经典

图 2-5

(6) 添加<div>标记分隔页面可以简化页面格式的修改。创建的Master页面将在<form>内使用4个<div>区域。有些区域中会包含其他<div>标记(子层次结构的<div>)。第一个<div>是由VWD自动创建的;其他的需手动添加。可以从工具箱的HTML面板中将<div>拖放到页面上,但是在Design视图中很难将其放到正确的位置上。您可以使用Source视图进行精确定位。

(7) 切换到Source视图并在窗体内找到默认的<div>。从<div>标记的开头到</div>标记的末尾都选中,可以注意到Properties窗口中现在显示的是<div>的属性。将id属性设置为content。

(8) 继续停留在Source视图中,通过拖放将另一个<div>从工具箱的HTML面板中拖放到<div id=“content”>的上方,但仍然在<form>内。将其id属性设置为header。

(9) 在表单内另外添加两个<div>标记。将标题下面的第一个<div>的id设置为sidebar,并将最下面的那个<div>的id设置为footer。

(10) 在Source视图中,现在创建子层次结构的<div>标记,这些标记将位于前面创建的<div>内部。在header<div>内,拖放一个<div>并将其id设置为logo。在logo <div>的后面将显示一些简单的文本,如下所示:

<form id="mainForm" runat="server">

<div id="header">

<div id="logo"></div>

ASP.NET入门经典

<h1>Wrox United</h1>

</div>

(11) 在sidebar<div>中添加文本Navigation,如下面的代码所示:

<div id="sidebar">

<h3>Navigation</h3>

</div>

(12) 在后面几个章节中将在content<div>内添加控件,但现在,只添加一个class为itemcontent的子层次结构<div class=>:

<div id="content">

<div class="itemContent">

<asp:contentplaceholder id="mainContent" runat="server" />

</div>

</div>

(13) 在footer<div>中添加两个版权信息:

<div id="footer">

<p class="left">

All images and content copyright &copy; Wrox Press and its subsidiaries

2004.

</p>

<p class="right">

Website designed by

<a href="http://www.frogboxdesign.co.uk" title="croak">Frog Box

Design</a>

</p>

ASP.NET入门经典

</div>

</form>

操作回顾

首先为站点导入一个CSS文件,这个文件是由作者创建好的,包含在本书的下载代码中(实际上,作者并不善于设计。我们觉得红色、粉红色和橙红色组合在一起比较合适,所以我们邀请Frog Box Design的一位设计师对示例站点进行设计)。由于CSS是HTML的技术,因此在这里没有讨论样式表的结构(详细内容可以参考附录E)。

然而,更重要的目标是使用VWD帮助创建一个Master页面,这个页面包含3个基本组成部分。通过使用Master Page模板,VWD为您创建了基本的HTML和XML输入标记。VWD还在第一行添加了<%@master…%>。最后,VWD提供了一个<div>,该<div>中包含了一个<asp:ContentPlaceHolder>标记。每个占位符标记都需要一个ID,因此可以将该标记的ID修改为有意义的名称。

然后对Master页面做了一些基本的修改,使它能支持本书后续章节将要添加的功能。所有这些内容其实都是HTML的功能,而不是 2.0的。首先,使用VWD的IntelliSense工具为要导入的CSS文件添加一个链接。然后创建了几个<div>标记,以便在标题区、边条(sidebar)、内容区和脚本区组织页面的内容。

下面的“试一试”部分将创建一个Content页面,这个页面用于填充site.master页面中的占位符。由于“about the site”页面很简单,所以先从创建该页面开始介绍。

(1) 在VWD中打开Wrox United站点,右击根目录。选择Add New Item并选中Web Form模板。将该页面命名为About.aspx并确保同时选中Select a master page和Place code in separate file两个复选框,如图2-6所示,即使该页面没有任何代码(如果没有为代码指定一个单独的文件,那么代码的架构标记(framework tag)就将出现在.aspx文件中。最好和站点的其他页面保持统一,将容器标记和代码分别保存在不同的文件中)。

ASP.NET入门经典

图 2-6

(2) 在第二个对话框中,选择site.master作为Master页面并单击OK,如图2-7所示。

图 2-7

(3) 在Design视图中,输入几行文本,如下所示:

The site was initially written by Dave,while design & graphics were done by Lou.

Conformance is XHTML 1.0 Transitional and CSS 2.1.

(4) 在这里可以体验到VWD对创建非ASP标记的辅助作用,例如创建超链接。在Design视图中,打开工具箱的Standard面板并找到Hyperlink控件,将其拖放到前面代码的第一行结尾处。在属性窗口中将text属性设置为Frog Box Design,将NavigationURL属性设置为www.frogboxdesign.co.uk。VWD将自动检查输入的属性值以创建该链接。

(5) 在Design视图中查看该页面,可以注意到,Master页面已经出现在页面架构中,而Content页面内只有您输入的文本。切换到Source视图,可以注意到这个About页面指定了它的Master页面,而它的内容将插入到mainContent占位符中。

操作回顾

ASP.NET入门经典

创建页面时,首先要在Solution Explorer中选择页面的父文件夹。在很多情况下,该文件夹是Web站点的根目录C:\BegASPNET2\WroxUnited,但有时可能是一个层次结构较低的文件夹,例如FanClub.aspx就存放在文件夹C:\BegASPNET2\WroxUnited\FanClub中。

Content页面是如何获得与site.master页面相互协作的3个功能的呢?起始标记<%@Page…>必须包含MasterPageFile属性。由于可能将这些文件移动到不同的文件夹结构中,可以使用波浪号(~)引用Master页面的位置,这个符号表明Master页面位于根目录下。其次,Content页面的内容包含在服务器端控件asp:Content中,这个控件的ContentPlaceHolderID属性指示将Content页面的内容插入到Master页面的什么位置。再次,因为HTML和XMLNS标记由Master页面引入,所以在Content页面中省略了这些标记。

Master和Content页面机制还有其他一些功能,虽然这些功能在Wrox United示例站点中没有实现,但是多层次的Master页面可以用于一个最终页面。根据发出请求的浏览器不同,可以使用不同的Master页面。一个Master页面可以支持多个内容占位符。

2.3.1 多层次的Master页面

虽然这种技术没有用于Wrox United站点,但是页面可以继承多层次的Master页面。这个功能提供了一种显示多层次结构标准内容的方式。例如,一个名为Publication.aspx的Content页面可以指定它的Master页面为Research.master,而Research.master又指定它的Master页面为Corporate.master。最终显示的结果是,Publication.aspx包含在Research.master内,而Research.master页面又包含在Corporate.master内。这样做的一个问题是用于显示内容的空间将随着层次结构的增加而不断减少。VWD没有包含用于创建多层次Master的自动工具。事实上,如果包含了多个层次,那么只能在Source视图中打开页面。

要创建带有多层次Master的页面,必须在中间层页面中包含标记同时指明该页面的Master页面(上一个层)和内容占位符(为下一层页面提供)。回忆一下,在Master页面的第一行代码中必须包含<%@master…>,而在低一层的页面或者Content页面的第一行代码中必须包含<%@ page masterPageFile=%>。如果是中间页面,它即是Content又是Master,那么第一行的标记必须以<%@master…开始,同时包含…masterPageFile=%>。

Master页面包含了一个<asp:ContentPlaceHolder>标记,而Content页面则包含了一个<asp:content>标记。如果是中间层页面,那么它必须包含一个<asp:content>标记,该标记与Master页面中的<asp:ContentPlaceHolder>标记相关联。然后在这个标记中有一个<asp:ContentPlaceHolder>标记,该标记用于包含下一层的页面。

下面的示例演示了一个Corporate Master页面、一个Research department Master页面和最终包含具体内容的Publication.aspx页面。下面的代码显示了Corporate页面。注意它的内容占位符是在阴影部分定义的:

<%@ Master Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

ASP.NET入门经典

"/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="/1999/xhtml" >

<head runat="server">

<title>CorporateMaster</title>

</head>

<body>

Corporation Name

<form id="form1" runat="server">

<div>

<asp:contentplaceholder

id="ContentPlaceHolderCorporate"

runat="server">

</asp:contentplaceholder>

</div>

</form>

</body>

</html>

下面的代码演示了Research department Master页面。这个页面最复杂,因为它既是Corporate页面的Content页面,同时也是Publication页面的Master页面。注意在第一行代码中,Master和MasterPageFile=将该页面设置为Corporate Master页面的内容。然后可以注意到<asp:ContentPlaceHolder>将其他页面作为自己的内容(在这里是Publication页面)。内容占位符必须全部包含在<asp:content>标记之内:

<%@ Master MasterPageFile="~/Corporate.master" Language="VB" %>

<asp:Content runat="server"

ASP.NET入门经典

ContentPlaceHolderID="ContentPlaceHolderCorporate">

Research Department

<asp:contentplaceholder

id="ContentPlaceHolderResearch"

runat="server">

</asp:contentplaceholder>

</asp:Content>

下面显示的是Publication.aspx页面的代码(其中只包含了网页的具体内容)。在此只需指定Master页面。这个页面不是Master页面,它位于最底层:

<%@ Page Language="VB"MasterPageFile="~/Research.master"Title="Untitled Page" %>

<asp:Content ID="Content1"

ContentPlaceHolderID="ContentPlaceHolderResearch"

Runat="Server">

Publication text

</asp:Content>

2.3.2 Master页面支持多个内容占位符

到目前为止,本书的示例在Master页面中只使用了一个<asp: ContentPlaceHolder>,在Content页面中也只使用了一个<asp:content>标记。 2.0支持多个内容占位符。但是,

ASP.NET入门经典

每个占位符都必须有自己的ID,如下例所示:

<%@ Master Language="VB" %>

<html><body>

<form id="form1" runat="server">

<asp:contentplaceholder runat="server" id="TopContent" />

<asp:contentplaceholder runat="server" id="MiddleContent" />

<asp:contentplaceholder runat="server" id="BottomContent" />

</form>

</body></html>

接下来就可以将内容包含在<asp:content>标记中,这些标记的ContentPlaceHolderID值与Master页面中的ID值相等:

<%@ Page Language="VB"MasterPageFile="~/research.master"Title="Untitled Page"%>

<asp:Content ID="Content1" ContentPlaceHolderID="TopContent" Runat="Server">

Text to go in Top section

</asp:Content>

<asp:Content ID="Content1" ContentPlaceHolderID="MiddleContent" Runat="Server">

Text to go in Middle section

</asp:Content>

<asp:Content ID="Content1"ContentPlaceHolderID="BottomContent"Runat="Server">

Text to go in Bottom section

ASP.NET入门经典

</asp:Content>

将内容分别存放在不同的<asp:ContentPlaceHolder>标记中有助于设计和维护Master页面的布局。

为了使用 2.0的导航功能,必须有一种标准的方法描述站点中的每个页面。这个标准不仅包含每个网页的名称,还应该能够表明它们的层次结构关系。例如,显示球员统计数据的页面应该是显示球员列表页面的子页面,而该页面又是主页的子页面:

Home

- Players

-- Player Statistics

定义这样的层次结构在站点设计中是一个很重要的部分,因为开发人员希望知道(在开始编写代码之前)需要开发什么页面、在不同的页面上应给用户提供哪些链接、以及用户在查看了一个特定的页面之后可能会浏览其他什么页面。画出站点的树型目录,就像上面的简单示例那样,这是必须采取的第一个步骤。然后可以进行下一个步骤,在代码中定义这个层次结构。

2.0在一个名为web.sitemap的XML文件中包含这些信息。可以将这个文件作为菜单和导航控件的数据来源,这一内容将在第3章讨论。

提示:

Microsoft在 2.0中所提供的是一种在菜单和导航控件中使用站点数据的方式,前提是这些数据要遵守web.sitemap标准。VWD为web.sitemap文件提供了一个模板,该模板中包含了web.sitemap文件所需的标记。但在写作本书的时候,还没有工具可以扫描站点并生成存放在这些标记中的实际数据。第三方工具将填补这个空隙,但现在必须手动将这些信息输入到web.sitemap文件中。

站点地图必须是一个名为web.sitemap的XML文件,而且位于Web应用程序的根目录下。XML是一种保存数据的标准,有些类似于数据库,但以一种肉眼可以阅读的文本形式存放数据。每个数据项保存在一个节点中,其中节点表示站点的一个页面,包含页面的URL、标题和描述。XML文件以树型结构保存节点,因此 2.0知道哪些页面应看作是某个父页面的子页面。例如,Corporate Departments页面应该是显示Sales、Research和Accounting各部门详细信息页面的父页面。该文件中的第一个标记是标准的,用于让XML文件标识版本号和XMLNS,如下代码所示:

<?xml version="1.0" encoding="utf-8" ?>

<siteMap xmlns="/AspNet/SiteMap-File-1.0" >

ASP.NET入门经典

这两行代码是由开发人员在VWD中使用站点地图模板添加该文件时由VWD自动输入的。节点的名称很简单:<siteMap>,该标记包含了多个<siteMapNode>标记。每个标记代表一个网页,而且可以包含以下属性(<siteMapNode>标记的所有属性都是字符串):

● Title:描述页面(这与页面头部的<Title>标记没有任何联系,虽然它们的值可以相同)。 ● URL:节点中描述的页面位置。

● Description:该页面的描述。

注意在一个URL中可以包含querystring数据,这是定义在页面URL之后的附加信息,作为页面请求的一部分发送给服务器。例如,通常引用一个页面的方式应该类似下面的第一行代码,而附带数据引用一个页面(例如,在日历中显示的月份)的方式将类似于下面的第三行代码:

url="Calendar.aspx"

url="Calendar.aspx?Month=May"

站点地图中页面之间的层次结构关系(父/子关系)是通过将子节点包含在父节点的开标记和闭标记之间建立起来的。注意在下面的代码中两个子页面

(Members和Calendar)是如何包含在Home页面的开和闭标记(灰色背景显示)内的。缩进只是为了便于阅读;并不会影响实际的层次结构关系。注意表示子页面(Members和Calendar)的标记可以使用单标记形式<Tag />。但是由于父页面(Home)拥有子页面(它包含其他节点),因此它必须使用双标记形式

<Tag> </Tag>:

<siteMap>

<siteMapNode title="Home"url="Default.aspx"description="Home page for MySite">

<siteMapNode title="Members"url="Members.aspx"description="All Members"/>

<siteMapNode title="Calendar"url="Calendar.aspx"description="Club Events"/>

</siteMapNode>

</siteMap>

为了在Calendar节点内创建两个子页面(Home页面的子页面),需要采取两个步骤。首先,将表示Calendar的<siteMapNode>转换成双标记形式,然后在这

本文来源:https://www.bwwdw.com/article/uzf1.html

Top