`
isiqi
  • 浏览: 16001363 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用 Web 标准生成 ASP.NET 2.0 Web 站点

阅读更多

http://www.microsoft.com/china/msdn/library/webservices/asp.net/ASPNETusStan.mspx?mfr=true

布日期: 11/30/2005 | 更新日期: 11/30/2005

Stephen Walther
SuperExpert.com

适用于:
Microsoft ASP.NET 2.0 (Beta 2)
Microsoft Visual Studio .NET 2005
Microsoft Visual Web Developer

摘要: Microsoft ASP.NET 2.0 具有很多有用的功能,能帮助您设计和生成符合 XHTML 和可访问性标准的 Web 站点。本文探讨如何以及为什么生成这些符合标准的站点。

*
本页内容

简介 简介
生成 XHTML Web 站点 生成 XHTML Web 站点
XHTML 标准的版本 XHTML 标准的版本
创建 XHTML 页 创建 XHTML 页
XHTML 和 ASP.NET 控件 XHTML 和 ASP.NET 控件
验证 XHTML 页 验证 XHTML 页
XHTML 和 DOCTYPE 切换 XHTML 和 DOCTYPE 切换
XHTML 和 MIME 类型 XHTML 和 MIME 类型
配置 XHTML 一致性 配置 XHTML 一致性
生成可访问的 ASP.NET Web 站点 生成可访问的 ASP.NET Web 站点
可访问性标准 可访问性标准
ASP.NET 2.0 中的可访问性改进 ASP.NET 2.0 中的可访问性改进
创建可访问的图像 创建可访问的图像
创建可访问的表单 创建可访问的表单
创建可访问的导航 创建可访问的导航
创建可访问的数据 创建可访问的数据
创建可访问的 XHTML 创建可访问的 XHTML
创建可访问的脚本 创建可访问的脚本
验证页的可访问性 验证页的可访问性
示例应用程序:可访问的 XHTML ASP.NET Web 站点 示例应用程序:可访问的 XHTML ASP.NET Web 站点
访问 Amazon Web 服务 访问 Amazon Web 服务
默认页 默认页
默认页的 XHTML 功能 默认页的 XHTML 功能
默认页的可访问性功能 默认页的可访问性功能
搜索页 搜索页
搜索页的 XHTML 功能 搜索页的 XHTML 功能
搜索页的可访问性功能 搜索页的可访问性功能
母版页 母版页
母版页的 XHTML 功能 母版页的 XHTML 功能
母版页的可访问性功能 母版页的可访问性功能
小结 小结

简介

Web 标准使您能通过最少的工作,生成可被最广大受众访问的 Web 站点。Web 标准的承诺是:只需设计页面一次,即可让该页以完全相同的方式在任何现代的浏览器中显示和工作。例如,在按照标准生成以后,旨在在 Microsoft Internet Explorer 中以某种方式显示的页可在其他浏览器(如,Mozilla Firefox、Netscape Navigator、Opera、Camino 和 Safari)中以相同的方式显示,而无需完成任何额外的工作。

Web 标准的一个额外好处是 — 使 Web 站点更易于为残疾人士访问。这是一个范围广泛的受众群体,包括视力衰退的中年人士,刚刚在滑雪时跌断胳膊的人士,以及完全失明的人士等。使用标准可避免无意中阻止那些具有暂时性或永久性身体残疾的人士访问 Web 页。

对于生成满足公共 Web 标准的 Web 站点而言,Microsoft ASP.NET 2.0 框架是最佳的框架。特别强调的是,ASP.NET 2.0 框架中的每个控件都按照 XHTML 和可访问性标准进行了全面的检查和测试。此外,Microsoft Visual Studio .NET 2005 还包含一些新工具,用于按照 XHTML 和可访问性标准验证 Web 页。

本文的目的是为您提供有关 XHTML 和可访问性标准的概述,并说明如何利用 ASP.NET 2.0 和 Visual Studio .NET 2005 来满足这些标准。在本文的结尾,将分步演练以下功能,即创建能够同时满足 XHTML 和可访问性标准的 ASP.NET 2.0 Web 站点。

生成 XHTML Web 站点

HTML 在正式的场合已经过时了。World Wide Web Consortium (W3C) 于 2000 年 6 月 26 日发布了 XHTML 的第一个版本作为推荐标准。XHTML 标准的目标是取代 HTML。按照 W3C 的说法,“XHTML 是 HTML 的继承者”(http://www.w3.org/MarkUp/)。

XHTML 标准的制定者具有两大目标:

在文档结构和表示形式之间创建更明显的分离。

将 HTML 重新表示为 XML 的应用程序。

为了实现第一个目标,W3C 一直在坚定地从 HTML 中删除纯粹描述性的元素和属性(他们是从 HTML 4.0 开始这一过程的)。例如,XHTML 1.0 Strict 不包含诸如 <font> 标记之类的元素或诸如 bgcolor 属性之类的属性,因为这些元素和属性完全用于描述文档的外观,它们与文档的结构没有任何关系。

W3C 一直在努力使 Web 站点设计人员和开发人员摒弃特定标记应当具有特定外观这一观念。例如,您可能会认为 <h1> 标记(标题标记)的用途是在页中呈现大的加粗文本。这实际上是错的。<h1> 标记用来在文档中标记标题而不是其他任何东西。如何呈现标题标记由浏览器确定。视力衰退的人士使用的屏幕阅读器可能利用抑扬顿挫的声音来大声朗读标题标记的内容。不支持多个字体大小的 PDA 可能用闪烁文本呈现标题标记的内容。

您不应当试图使用诸如 <h1> 标记之类的页元素来控制 Web 页的外观。相反,您应当通过使用层叠样式表来指示 Web 页的外观。而且,您所使用的层叠样式表应当是外部 层叠样式表。请使用标记和属性来标记文档的结构,而使用样式表来控制文档的表示形式。

XHTML 的第二个目标是迫使 HTML 开发人员遵守更为严格的 XML 规则。按照 W3C 的说法,“XHTML 1.0 是 HTML 4.01 的作为 XML 1.0 应用程序的修订”(http://www.w3.org/MarkUp/)。换句话说,使用 XHTML 生成 Web 页时,实际上是在创建 XML 文档。

XML 文档具有比 HTML 文档更严格的语法。例如,XML 区分大小写,所有 XML 属性都必须放在引号内,而且 XML 标记不能重叠。强迫 Web 站点开发人员和设计人员遵守有更高要求的语言规则有很多好处。

好处之一,用 XHTML 标记编写的页具有更高的跨浏览器、跨设备和跨操作系统兼容性。如果在浏览器中打开传统的 HTML 页,浏览器将千方百计地呈现该页。浏览器将试图呈现该页,即使您的 HTML 一团糟。例如,Internet Explorer(以及 Firefox 和 Opera)能够很好地显示下面的 HTML 页。

<i><B>this is bold and italic</I> and this is bold </body></HTML>

Internet Explorer 会恰当地显示该页 — 即使该页缺少 <html><body> 开始标记,<b> 标记不具有匹配的结束标记,并且开始和结束 <i> 标记的大小写不一致。所有主要的浏览器都能适应几乎任何 HTML 标记“混合物”,并且不顾一切地呈现一些内容。

浏览器的这种适应行为是危险的,因为不同的浏览器(或相同浏览器的将来版本,或在不同操作系统上运行的相同浏览器)可能以不同方式呈现错乱的 HTML。实际上,对于最新版本的 Internet Explorer、Mozilla Firefox 和 Opera 而言,它们呈现无效 HTML 的方式惊人地一致。但是,一旦开始违反游戏规则,就不会得到任何保证。

然而,如果用 XHTML 的更严格的规则编写 Web 页,那么 Web 页就更有可能以一致的方式与当前浏览器协作,并且它们将继续与当前浏览器的未来新版本协作。对于任何公司而言,几乎都不具备针对每个浏览器、在每个操作系统和每个设备上测试其 Web 站点的资源。如果按照 Web 标准编写页面,那么就不必具有这样的资源。

XHTML 标准的版本

有三个版本的 XHTML 1.0,它们分别对应三个版本的 HTML 4.01:

XHTML 1.0 Transitional

XHTML 1.0 Strict

XHTML 1.0 Frameset

XHTML 1.0 Transitional 包含 HTML 4.01 Transitional 中的全部标记和属性。引入 XHTML 1.0 Transitional 标准的目的是,使现有 HTML 设计人员和开发人员无需经历太多的痛苦就能迁移到 XHTML。

XHTML 1.0 Strict 与 XHTML 1.0 Transitional 的不同之处在于,它在文档结构和表示形式之间实施了一种更为明显的分离。与 XHTML 1.0 Transitional 不同,XHTML 1.0 Strict 强迫您使用层叠样式表来控制页的外观。

XHTML 1.0 Frameset 文档意在成为使用 <frameset> 标记将浏览器划分为多个框架的文档(XHTML 1.0 Transitional 和 Strict 页不能包含 <frameset> 标记)。

W3C 还发布了 XHTML 1.1 以作为推荐标准(2001 年 5 月 31 日)。XHTML 1.1 非常类似于 XHTML 1.0 Strict。二者的主要区别在于,可以用附加模块扩展 XHTML 1.1 以便支持新元素。例如,可以生成特定的 XHTML 1.1 页,该页还包含 MathML(数学标记语言)、SVG(可伸缩向量语言)或创建的自定义模块中的元素。

最后,W3C 正在制订 XHTML 2.0 推荐标准。因为 XHTML 2.0 仍然处于起草阶段,并且当前没有 Web 浏览器支持该标准,所以我们不在本文讨论它。

ASP.NET 2.0 框架和 Visual Studio .NET 2005 面向 XHTML 1.0 Transitional。该标准是 XHTML 标准中限制性最低的,而且它是与现有 HTML 页最兼容的标准。但是,还可以生成面向 XHTML 1.0 Strict 标准甚至 XHTML 1.1 标准的 ASP.NET 2.0 页(请参阅后面的“配置 XHTML 一致性”一节)。

(请注意,默认情况下,ASP.NET 框架的 Beta 2 版本面向 XHTML 1.1。 ASP.NET 2.0 框架的最终版本将面向 XHTML 1.0 Transitional。)

创建 XHTML 页

与 HTML 页不同,XHTML 页必须是标准格式且有效的 XML 文档。XHTML 1.0 推荐标准的第 4 部分对 HTML 和 XHTML 之间的区别进行了总结。这里给出生成有效 XHTML 页的最重要需求的列表:

页必须包含有效的 XHTML DOCTYPE。

有效的 XHTML 页必须在其任何内容之前包含一个 XHTML DOCTYPE。当在 Visual Studio .NET 2005 或 Microsoft Visual Web Developer 中创建新的 ASP.NET 页时,该页中将自动包含 XHTML 1.0 Transitional 的正确的 DOCTYPE。下面列出四个标准的 XHTML DOCTYPE:

XHTML 1.0 Transitional

<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

XHTML 1.0 Strict

<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

XHTML 1.0 Frameset

<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

XHTML 1.1

<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

向页中添加 DOCTYPE 会影响该页在浏览器中的呈现方式。请参阅以下标题为“XHTML 和 DOCTYPE 切换”的一节。

根元素必须引用 XHTML 命名空间。

XHTML 页的开始 <html> 标记必须指定默认命名空间 http://www.w3.org/1999/xhtml。以下是 XHTML 1.0 Transitional 页的有效开始 <html> 标记的示例:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

所有元素和属性名都必须小写。

XML 区分大小写。因此,在 <p> 标记和 <P> 标记之间存在差异。只有前者是有效的 XHTML 段落标记。

属性值必须始终放在引号内。

确保始终将属性值放在双引号或单引号中。例如,以下是无效的 XHTML。

<a href=SomePage.aspx>Next</a>

在该示例中,href 属性缺少引号。以下代码是有效的 XHTML。

<a href="SomePage.aspx">Next</a>

您可以通过选择菜单选项 ToolsOptionsFormat,将 Visual Studio .NET 2005 和 Visual Web Developer 配置为自动将属性值放在引号内。

所有具有开始标记的非空元素都必须具有匹配的结束标记。

如果具有开始 <p> 标记,则必须包含结束 </p> 标记来标记段落的结束。对于根本不包含任何内容的标记,例如 <br> 标记,可同时提供开始和结束标记 <br></br>,也可以使用空元素简写

为使 XHTML 页与现有的 HTML 浏览器向后兼容,需要小心处理打开和关闭标记的方式。例如,现有 HTML 浏览器倾向于将开始和结束 <br> </br> 标记错误地解释为两个 <br> 元素。因此,您应当使用空元素简写</br>

此外,除非您小心地在结束斜杠之前添加一个空格,否则现有 HTML 浏览器在处理空元素简写时会出现问题。因此,应当使用 <BR< b>[space] />(而不是)向页中添加 <br> 元素。

不得存在重叠标记。

可以使标记嵌套,但是不允许使标记重叠。例如,以下 XHTML 是有效的。

<b><i>This is bold and italic</i></b>

但是,以下 XHTML 是无效的。

<i><b>This is bold and italic</i></b>

不得存在属性最简化。

所有属性都必须具有值,即使该值看起来有一点儿奇怪。例如,标记<input type="checkbox" checked />是无效的 XHTML,因为 checked 属性不具有值。该标记应当写成<input type="checkbox" checked="checked" />

必须使用 id 属性而不是 name 属性。

在 HTML 中,可以使用 name 属性来标识 <a><applet><form><frame><iframe><img><map> 元素。尽管可以使用 name 属性生成 XHTML 1.0 Transitional 页,但在 XHTML 1.0 Strict 和 XHTML 1.1 标准中已经将 name 属性删除。您应当改而使用 id 属性来标识这些元素。

必须将 <script><style> 元素的内容包装到 CDATA 节中。

如果在脚本或样式表中使用特殊字符(例如 < 或 &)或实体引用(例如 <&),则需要将脚本或样式表的内容标记为 CDATA(字符数据)节,如下所示。

<script type="text/javascript">
<![CDATA[

function isLess(a, b) {
  if (a < b)
    return true;
}

]]>
</script>

使用 CDATA 节并非对所有浏览器都有效。例如,Internet Explorer 会将 <script> 标记中的 CDATA 节视为语法错误。可以通过添加 JavaScript 注释避免该问题,如下所示。

<script type="text/javascript">
/* <![CDATA[ */

function isLess(a, b) {
  if (a < b)
    return true;
}

/* ]]> */
</script>

JavaScript 使用 /**/ 来标志注释的开始和结束。因此,CDATA 节对 JavaScript 隐藏,但不对分析该页的浏览器隐藏。总之,较好的做法是将样式规则和脚本放在外部文件中,而从 XHTML 页中引用这些文件。通过使用外部样式表和脚本,能够避免上述所有问题。

XHTML 和 ASP.NET 控件

默认情况下,ASP.NET 2.0 框架中包含的每个 ASP.NET 控件都呈现有效的 XHTML。换句话说,向页中添加 ASP.NET 控件时,您无需完成任何特殊工作来生成有效的 XHTML 标记。例如,如果您向页中添加 GridView 控件,则 GridView 控件会生成有效的 XHTML 标记。

这里需要澄清三个要点。首先,包含 ASP.NET 控件的页的源代码不会通过 XHTML 验证。验证 ASP.NET 页时,需要验证页呈现的内容(在 Internet Explorer 中选择 View Source 时看到的所有内容),而不是该页的源代码。

其次,在创建 ASP.NET 页时,没有任何事情阻止您编写无效的 XHTML。您当然可以向 ASP.NET 页中添加希望添加的任何标记。例如,如果向页中添加 标记,那么页将不会通过 XHTML 1.0 Strict 验证。

最后,当您使用自定义 ASP.NET 控件时,没有任何保证。如果购买第三方 ASP.NET 控件(例如,一个一流的增强 DataGrid 控件),则该控件可能会呈现有效的 XHTML,但也可能不会。保证不犯错误是控件供应商的责任。

验证 XHTML 页

Visual Studio .NET 2005 和 Visual Web Developer 会在生成 Web 页的过程中自动验证该页的有效性。通过在违反规则的内容下添加绿色或红色波浪线,在“Source”视图中指出验证问题。红色波浪线对应于诸如缺少结束标记之类的验证错误。绿色波浪线对应于验证警告,例如,使用了已否决的标记。

将鼠标悬停在任何波浪线上方,可查看包含验证错误或警告消息的工具提示(参见图 1)。或者,还可以在 Error List 窗口中查看验证错误或警告的列表(依次选择 ViewOther WindowsError List)。


1. 验证 XHTML 文档

默认情况下,Visual Studio .NET 2005 和 Visual Web Developer 被配置为针对 Internet Explorer 6.0 架构验证页。如果要针对 XHTML 架构验证页,则需要从工具栏的下拉列表中选择 XHTML 架构中的一个,或依次选择 ToolsOptionsValidation 来选择目标架构。

作为替代方法,还可以通过使用 W3C验证服务来验证 ASP.NET 页。W3C 验证服务使您能够通过提供 URL 或通过上载 XHTML 页的源代码来验证页。

XHTML 和 DOCTYPE 切换

为 Web页指定 DOCTYPE 会影响浏览器呈现页的方式。Internet Explorer、Mozilla Firefox 和 Opera 全都支持一种名为“DOCTYPE 切换”(也叫“DOCTYPE 嗅探”)的功能。

引入 DOCTYPE 切换的目的是使浏览器能够正确地呈现符合标准的 Web 站点以及旧式 Web 站点。大多数 Web 站点被开发为呈现 HTML 页而不是 XHTML 页。浏览器通过判断是否存在 DOCTYPE 来确定何时应该使用标准来呈现页。

Internet Explorer 6+ 支持两种呈现模式,分别叫做 Quirks 模式和 Standards 模式。当 Internet Explorer 呈现包含有效 XHTML(或 HTML 4.0)DOCTYPE 的页时,它会以 Standards 模式呈现该页;否则,它会以 Quirks模式呈现该页(有关详细信息,请参阅 CSS Enhancements in Internet Explorer 6)。

Opera 浏览器 (Opera 7+) 支持与 Internet Explorer 相同的两种呈现模式:Quirks 和 Standards(有关详细信息,请参阅 http://www.opera.com/docs/specs/doctype/)。

Mozilla Firefox 1+ 支持三种呈现模式:Quirks 模式、Almost Standards 模式和 Standards 模式。Firefox 的 Almost Standards 模式对应于 Internet Explorer 和 Opera 的 Standards 模式。当页包含有效的 XHTML 1.0 Transitional DOCTYPE(并且该页被分配为 text/html MIME 类型)时,Firefox 会以 Almost Standards 模式呈现该页。当页包含 XHTML 1.0 Strict 或 XHTML 1.1 DOCTYPE(或者该页被分配为 XML MIME 类型)时,该页将以 Standards 模式呈现(有关详细信息,请参阅 http://www.mozilla.org/docs/web-developer/quirks/doctypes.html)。

可以通过临时向页中添加以下客户端脚本(该脚本在最新版本的 Internet Explorer、Firefox 和 Opera 中有效)确定浏览器的当前呈现模式。

<script type="text/javascript"> alert( document.compatMode ); </script>

您需要关心浏览器的呈现模式,因为它会影响将层叠样式表应用于该页的方式。如果将现有 HTML 页转换为 XHTML 页,那么在浏览器中打开它们时,它们可能看起来非常不同。

例如,Internet Explorer 以不同方式计算页元素的大小,这取决于呈现模式(它使用不同的 CSS Box Model)。在 Quirks 模式下,元素的宽度是通过将元素的内容、内边距、边框和边距相加而计算得到的。在 Standards 模式下,元素的宽度是只考虑元素内容的宽度而计算得到的。

例如,考虑下列两个 <div> 标记。

<div style="width:400px;border:solid 1px black"> 
    First Box 
    </div> 
    <div style="width:400px;border:solid 1px black;padding:10px"> 
    Second Box 
    </div>

除了第二个 <div> 元素的附加内边距以外,这两个 <div> 元素是相同的。在 Quirks 模式(参见图 2)下,这两个 <div> 元素看起来大小相同,因为在计算第二个 <div> 元素的宽度时考虑了它的附加内边距(这两个元素的总宽度为 400px)。在 Standards 模式(参见图 3)下,第二个 <div> 元素看起来要比第一个 <div> 元素宽,因为在计算元素的宽度时未考虑内边距(这两个元素的总宽度大于 400px)。


2. Quirks 模式


3. Standards 模式

这只是 Quirks 模式下浏览器差异的一个示例。在 Quirks 模式下,每个浏览器都以相当不同的方式实现 W3C层叠样式表标准。有关切换到 Standards 模式的一个妙处在于,它强制几乎所有现代浏览器以非常类似的方式(不完全相同,但要好得多)解释 W3C标准。

如果希望 Web 页以相同方式出现在所有浏览器中,那么通过包含 XHTML 1.0 Transitional DOCTYPE 触发 Standards 模式(在 Internet Explorer 和 Opera 中)和 Almost Standards 模式(在 Firefox 中)是一个好主意。幸运的是,默认情况下,Visual Studio .NET 2005 和 Visual Web Developer 自动将该 DOCTYPE 添加到每个新的 ASP.NET 页中。

XHTML 和 MIME 类型

当 Web 浏览器从 Web 服务器请求页时,Web 服务器会为该页分配特定的 MIME 类型(也称为 Content 类型)。例如,HTML 页被分配为 text/html MIME 类型,GIF 图像被分配为 image/gif MIME 类型,而 Microsoft Word 文档被分配为 application/msword MIME 类型。

浏览器使用 MIME 类型来确定如何处理页(或其他资源)。例如,如果浏览器从 Web 服务器获得一个具有可识别图像 MIME 类型的文件,则浏览器尝试将该文件解释并呈现为图像。如果浏览器获得一个具有 application/msword MIME 类型的文件,则该浏览器可能自动打开 Microsoft Word 以显示该文档(这里的确切行为取决于浏览器及其配置方式)。

W3C 为 XHTML 文档引入了一个 MIME 类型。这一新的 MIME 类型是 application/xhtml+xml。W3C 建议您在提供 XHTML 文档时使用 application/xhtml+xml MIME 类型,因为 XHTML 页应该以比旧式 HTML 页更严格的方式进行解释。

通过在页指令中包含 ContentType 属性,为 ASP.NET 页分配特定的 MIME 类型。例如,在 ASP.NET 页的顶部包含以下指令会导致为该页分配 application/xhtml+xml 类型。

<%@ ContentType="application/xhtml+xml" %>

W3C 的推荐标准有一个突出问题:并非所有浏览器都能识别 application/xhtml+xml。特别需要指出的是,Internet Explorer(有史以来最为流行的 Web 浏览器)不能识别 application/xhtml+xml MIME 类型。因此,使用推荐的 application/xhtml+xml MIME 类型提供 XHTML 页不是一个可行的选择。

有三种解决该问题的方式。可以使用 text/html MIME 类型来提供 XHTML 页,或者使用 application/xml(或 text/xml)MIME 类型来提供 XHTML 页,也可以使用内容协商方式。让我们对上述每个选择进行探讨。

第一个选择 — 以 text/html 类型提供页 — 是最容易的选择。默认情况下,ASP.NET 页被分配为该 MIME 类型。更好的做法是,按照 W3C 的建议,在向现有的 HTML 浏览器提供页时使用这一选择(请参阅 http://www.w3.org/TR/xhtml-media-types/)。如果创建的是 XHTML 1.0 Transitional 页,并且 Web 应用程序的主要受众使用不能理解 application/xhtml+xml MIME 类型的浏览器,那么以 text/html 类型提供页似乎十分明智。毕竟,引入 XHTML 1.0 Transitional 标准的目的是使开发人员能够更为容易地将现有的 HTML 页迁移到 XHTML。

这一主张是有争议的。例如,Ian Hickson 认为,绝不应该以 text/html 类型提供 XHTML 页,因为这样会导致随便的、不标准的 XHTML 页(请参阅 http://hixie.ch/advocacy/xhtml)。他建议作者们继续坚持使用 HTML 4.0,直到更多的浏览器完全支持 XHTML 标准为止。

第二个选择是使用 application/xml 或 text/xml MIME 类型,以 XML 类型提供 XHTML 页。在向 Internet Explorer 提供 XML 文档时,该文档会作为 XML 文档进行分析并呈现到浏览器中。(该文档由 document.XMLDocument 对象公开的 XML DOM 表示。)

以 XML 类型提供 XHTML 文档的优点是,XHTML 文档具有的任何问题都会被 Internet Explorer 的 XML 分析器捕获。例如,如果文档包含重叠标记,或者如果没有将属性的值包装到引号内,则不会呈现该文档,并且会显示错误信息(参见图 4)。XHTML 纯粹主义者认为该行为是一件好事,因为它可以防止您编写格式错误的 XHTML。


4. Internet Explorer 中显示 XML

该方法的问题是:默认情况下,Internet Explorer 呈现 XML 文档的源代码。因此,如果以 XML 类型提供 XHTML 文档,则 Web 站点访问者将看到 XHTML 文档的源代码,而不是预期的呈现输出。W3C 推荐了一个用来解决该问题的“窍门”(请参阅 http://www.w3.org/MarkUp/2004/xhtml-faq#ie):如果通过使用 XSLT 转换将 XHTML 文档转换为 HTML,那么文档将分析为 XML 并显示为 HTML。

例如,清单 1 中的 ASP.NET 页将以 XML 文档的形式提供,但被转换为 HTML 文档。结果页会正确地显示在 Internet Explorer、Opera 和 Firefox 中。

清单 1. XMLPage.aspx

<%@ Page Language="VB" ContentType="text/xml" %> 
<?xml-stylesheet type="text/xsl" href="copy.xsl"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>My Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:TextBox ID="txtFirstName" runat="server" /> 
    </div> 
    </form> 
</body> 
</html>

页指令会导致该页以 text/xml 类型呈现。清单中的第二行引用了一个名为 copy.xsl 的 XSLT 样式表,它会对当前文档执行标识转换。换句话说,除了将原始XML 文档中的所有元素复制到新的 HTML 文档中以外,它根本没有做任何事情。copy.xsl 的源代码包含在清单 2 中。

清单 2. Copy.xsl

<stylesheet version="1.0" 
     xmlns="http://www.w3.org/1999/XSL/Transform"> 
  <template match="/"> 
    <copy-of select="."/> 
  </template> 
</stylesheet>

该解决方案是有效的,但它似乎不是很精彩。当分析 XML 文档时,的确获得了额外的验证步骤。但是,如果在 Visual Studio .NET 2005 或 Visual Web Developer 中生成 ASP.NET 页,那么开发环境会在“Source”视图中执行相同的验证。最后,Internet Explorer 将收到与向它发送 text/html 类型文档时相同的文档。

第三个选择 — 内容协商,将 W3C 推荐标准的精神与最大程度的浏览器兼容性最佳地组合在一起(请参阅 http://www.w3.org/2003/01/xhtml-mimetype/content-negotiation)。当使用内容协商时,会以不同的 MIME 类型向不同的浏览器提供 ASP.NET 页。如果浏览器声称它支持 XHTML,则向它提供 XHTML 类型的页;否则,以 text/html MIME 类型向该浏览器提供页。

清单 3 中的 Global.asax 包含向不同的浏览器提供不同 MIME 类型页所需的代码。如果将该文件添加到 Web 项目中,则每个 ASP.NET 页的 MIME 类型都会随着每个请求而修改。将页提供给 Firefox 或 Opera 时,该页以 application/xhtml+xml 类型提供。另一方面,Internet Explorer 6 会收到 text/html 页。

清单 3. Global.asax

<script runat="server"> 
    Sub Application_PreSendRequestHeaders(ByVal s As Object, _ 
      ByVal e As EventArgs) 
        If Array.IndexOf(Request.AcceptTypes, _ 
          "application/xhtml+xml") > -1 Then 
            Response.ContentType = "application/xhtml+xml" 
        End If 
    End Sub 
</script>

配置 XHTML 一致性

ASP.NET 2.0 框架的默认行为是呈现针对 XHTML 1.0 Transitional 能够通过验证的页。生成 Web 站点的大多数开发人员都希望面向该标准,因为它是与现有 HTML 页最为兼容的标准。但是,在某些情况下,该标准可能显得太松散或太严格。

例如,如果您志向远大,那您也许要生成 XHTML 1.0 Strict(甚至 XHTML 1.1)的 Web 站点。毕竟,XHTML 1.0 Transitional 标准的目标是充当通往这些更具限制性标准的跳板。默认情况下,因为 ASP.NET 2.0 框架面向 XHTML 1.0 Transitional,所以某些 ASP.NET 控件会呈现与 XHTML 1.0 Strict 或 XHTML 1.1 不兼容的属性。

而且,有时您还可能发现 XHTML 1.0 Transitional 标准的限制性过高。Microsoft 必须对现有 ASP.NET 1.1 控件进行多项更改才能符合 XHTML 1.0 Transitional 标准。其中一些更改可能会破坏现有的 ASP.NET 1.1 Web 站点。

为了满足每个人的要求,Microsoft 创建了一个名为 xhtmlConformance 的新配置选项,您可以在 Web 站点的配置文件中设置该选项。新的配置选项使您能够指定 Web 页的 XHTML 一致性的级别。它的内容如下所示。

<configuration> 
<system.web> 
    <xhtmlConformance  
        mode="transitional" /> 
</system.web> 
</configuration>

默认情况下,xhtmlConformance 设置为值 transitional。但是,还可以将该选项设置为值 strictlegacy

如果将 xhtmlConformance 选项设置为 strict,那么标准的 ASP.NET 控件将不会再呈现某些属性。例如,ASP.NET <form> 控件将不再呈现 name 属性。除非 ASP.NET 页包含(不符合标准的)客户端脚本,否则从 transitional 模式切换到 strict 模式时,不会注意到任何变化。

如果将 xhtmlConformance 选项设置为 legacy,那么对于某些元素和属性(但不是全部),ASP.NET 框架将恢复为 ASP.NET 1.1 呈现行为。在这种情况下,ASP.NET 框架将呈现不与任何 XHTML 标准兼容的内容,并且页将不再通过 XHTML 标准验证。例如,在 legacy 模式下,呈现 <br> 标记时不会呈现它需要的 XHTML 结束斜杠 (<br />)。只有在将现有 ASP.NET 1.1 应用程序迁移到 ASP.NET 2.0 的过程中遇到问题时,将 xhtmlConformance 设置为 legacy 模式才是有意义的。

生成可访问的 ASP.NET Web 站点

遵守公共 Web 标准的好处是:它们使您以尽可能少地工作,使尽可能多的人能访问您的 Web 页。需要指出的是,可访问性标准使您能够生成可被残疾人士更容易访问的 Web 站点。

同样要强调的是,Web 站点用户中的相当一部分具有这样或那样的残疾。请试想一下您自己的家庭成员,并且考虑他们中有多少人会在与 Web 页交互时遇到麻烦。我就有一些上了年纪的亲戚是盲人或者失去了动作协调性。我猜测,本文的很多读者也有上了年纪的父母或祖父母,他们在使用大多数 Web 站点时会遇到很多困难。

生成可访问的 Web 站点有很多充分的理由:财务、道德、法律等等。但是,我们将重点讨论法律动机。在美国,按照康复法案 (Rehabilitation Act) 508 节的要求,联邦政府机构开发的任何 Web 站点都要使残疾人士可以访问。这一法律适用于联邦政府机构以及与联邦政府机构订立合同的公司(请参阅 http://www.section508.gov)。

其他国家/地区也具有类似的要求。例如,在加拿大,Treasury Board Common Look and Feel Standards 要求联邦政府机构开发的 Web 站点都要使残疾人士可以访问。在澳大利亚,Disability Discrimination Act 要求澳大利亚服务器上承载的所有 Web 站点(无论其是否是政府的 Web 站点)都要使残疾人士可以访问。(有关可访问性法律的详细信息,请参阅 http://www.w3.org/WAI/Policy。)

在我知道的 Web 站点开发人员中,没有任何人会故意生成残疾人士无法访问的 Web 站点。问题在于大多数开发人员都不熟悉各种可访问性标准。

在本文的下列各节中,将概述以下两个最重要的可访问性标准:WCAG 和 508 节标准。您还将学习如何通过使用 ASP.NET 控件生成可访问的 Web 页。最后,您将学习如何“验证”Web 页的可访问性。

可访问性标准

几乎所有可访问性标准和法律都源自 W3C Web Content Accessibility 1.0 Guidelines (WCAG)。这些准则是由 World Wide Web Consortium 在 1999 年 5 月 5 日作为推荐标准首次发布的(请参阅 http://www.w3.org/TR/WCAG10)。

WCAG 包含 14 条准则。每一条准则又包含一个或多个进一步阐明该准则的检查点。每个检查点都按 1 到 3 的优先级进行分级。为使这些准则的实施变得更加容易,W3C 已经发布了一组文档,其中包含有关如何遵守这些准则的技术(请参阅 http://www.w3.org/TR/WCAG10-TECHS/)。

您可以要求不同程度地遵守 WCAG 准则。如果要求 Web 站点满足所有优先级 1 的检查点,则您可以显示具有 Conformance Level A 的标识语。当 Web 站点满足所有优先级 1 和 2 检查点时,该 Web 站点可以显示 Conformance Level Double-A 标识语。最后,满足所有检查点的 Web 站点可以显示 Conformance Level Triple-A 标识语(请参阅 http://www.w3.org/WAI/WCAG1-Conformance.html)。

508 节准则源自 WCAG 准则。在美国,联邦政府机构(以及与联邦政府机构订立合同的公司)需要对这组准则给予最高程度的关注,因为这些准则具有法律效力。您可以在 508 节 Web 站点读到 508 节准则的完整文本。

ASP.NET 2.0 框架旨在使您能够满足所有 WCAG 优先级 1 和优先级 2 的检查点以及所有 508 节准则。这些准则使用起来非常严格。每个使用 ASP.NET 2.0 框架的开发人员都需要检查和测试每个 ASP.NET 控件的可访问性。而且,每个开发人员都应该在桌面上安装一个屏幕阅读器,以便针对这些准则测试页。

ASP.NET 2.0 中的可访问性改进

本文重点讨论 ASP.NET 2.0 框架中六个方面的可访问性改进。在下列各节中,您将学习如何使用 ASP.NET 控件来显示可访问的图像、表单、导航、数据和 XHTML。在本节结尾,我们还将考虑与在 ASP.NET 页中使用客户端脚本有关的可访问性问题。

创建可访问的图像

您不应当做这样的假设:与 Web 站点交互的每个人都可以实际看到您的 Web 站点。如果某个人是盲人或者视力不足,那么这个人就可能需要使用屏幕阅读器或盲文显示器来访问您的 Web 页。屏幕阅读器通过使用语音合成器来朗读 Web 页中的文本。盲文显示器将页中的文本转换为盲文表示。

对于无法看到它们的人而言,图像和其他非文本页元素(例如,Java、Shockwave 和 Flash 内容)都是没有用的。如果您希望使 Web 站点对于盲人或弱视的人是可访问的,那么需要为 Web 页中的所有非文本内容提供文本等效内容。

Web 页中的每个图像都应该包含 alt 属性。alt 属性用来表示由屏幕阅读器或其他辅助性设备阅读的替换文本。以下是 alt 属性的使用方式。

<img src="Products23.gif" alt="Image of Products" />

alt 属性应当包含图像的说明。在任何情况下,它都不应该只是包含该图像的文件名。alt 属性的目的是为盲人和视力正常的人传递相同的图像信息。写入 alt 属性的值时要求对该元素的含义进行人工解释。因此,不能自动完成创建 alt 属性的过程。

每个显示图像的 ASP.NET 控件都包含用于为该图像提供替换文本的方法。例如,ASP.NET 图像控件包含 AlternateText 属性。如果使用 Image 控件,则需要将 AlternateText 属性设置为有意义的值。

<asp:Image ImageUrl="Products23.gif" AlternateText="Image of Products" Runat="Server" />

如果某个图像只是用作设计元素,则应当将它的 alt 属性设置为空字符串。如果图像不具有需要传达的有用信息,那么就没有理由使屏幕阅读器的页解说变得散乱。

<img src="PageDivider.gif" alt="" />

在 ASP.NET 2.0 框架中,必须采取特殊措施,使您能够呈现空的 AlternateText。如果将空文本分配给 ASP.NET 控件的属性,则 ASP.NET 控件将根本不会呈现该属性。例如,假设将以下

分享到:
评论

相关推荐

    使用Web标准生成 ASP.NET 2.0 Web站点

    Web 标准使您能通过最少的工作,生成可被最广大受众访问的 Web 站点。Web 标准的承诺是:只需设计页面一次,即可让该页以完全相同的方式在任何现代的浏览器中显示和工作。例如,在按照标准生成以后,旨在在 ...

    使用Web标准生成ASP.NET2.0Web站点

    本页内容简介生成XHTMLWeb站点XHTML标准的版本创建XHTML页XHTML和ASP.NET控件验证XHTML页XHTML和DOCTYPE切换XHTML和MIME类型配置XHTML一致性生成可访问的ASP.NETWeb站点可访问性标准ASP.NET2.0中的可访问性改进创建...

    asp.net知识库

    ASP.NET2.0 ObjectDataSource的使用详解(3) ASP.NET2.0 快速入门 ----默认中的主题外观 数据库开发 ADO.NET 通过DataTable获得表的主键 ADO.NET 2.0 操作实例 ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO...

    Fesend CMS系统源码(.NET 2.0版本!)

    Fesend CMS系统源码 【.Net 2.0版本!】 环境:Vs2005,SqlServer 2000 运用了流行的AJAX技术及.net技术,将.net的缓存技术发挥到淋漓尽至,从而极大的提高了程序运行的效率以及减轻了服务器的负担,性能及效率...

    ajax工具包<vs2005用>

    web2.0横空出世,ajax首当其冲,今天做web的如果再不学点ajax的话,就显的落伍了,而学ajax的用的环境如果是asp.net,那ajax.net你就不得不学了。首先就是环境的配置,如下 vs2005+sql2005+Winxp sp2+ie6.0+Office...

    ASP.NET4高级程序设计(第4版) 3/3

    1.2.2 ASP.NET2.0 9 1.2.3 ASP.NET3.5 10 1.2.4 ASP.NET4 12 1.2.5 Silverlight 14 1.3 总结 15 第2章 Visual Studio 16 2.1 Visual Studio 16 2.1.1 网站和Web项目 17 2.1.2 创建无项目文件的...

    asp.net学习积累的代码段

    ASP.NET 2.0高级控件之FileUpload控件.txt ASP.NET 程序中常用的三十三种代码.txt asp.net使用客户端验证.txt Asp.net中基于Forms验证的角色验证授权).txt asp.net中如何用c#实现弹出式的交互对话窗口.txt cookie...

    ASP.NET生成eurl.axd Http异常错误的处理方法

    ” 错误发生的原因是当ASP.NET检测到Web站点配置为使用ASP.NET 4.0,本地ASP.NET 4.0 的组件会传递一个不能扩展的 URL到ASP.NET的管理程序作进一步处理。但是,如果一个低于ASP.NET 4.0 的网站配置为使用ASP.NET ...

    msdn精选(集合的精华)

    【Web开发】了解和扩展ASP.NET 2.0中的站点导航系统 【工具与技巧】构建高性能的ASP.NET应用程序 【工具与技巧】使用WMI和MOM 2005检测和监视ASP.NET应用程序 【软件测试】底层UI测试自动化 【特别策划】使用Visual ...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    1.2.2 ASP.NET2.0 1.2.3 ASP.NET3.5 1.2.4 ASP.NET4 1.2.5 Silverlight 1.3 总结 第2章 Visual Studio 2.1 Visual Studio 2.1.1 网站和Web项目 2.1.2 创建无项目文件的网站 2.1.3 设计网页 2.2...

    ASP.NET 3.5 开发大全

    16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...

    ASP.NET3.5从入门到精通

    16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 第一篇窗口与界面编程 19 16.1.5 AJAX 简单示例 16.2 ASP.NET 3.5AJAX 控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) ...

    ASP.NET 3.5 开发大全word课件

    16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...

    ASP.NET 3.5 开发大全11-15

    16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...

    ASP.NET 3.5 开发大全1-5

    16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...

    Url重写篇视频------本讲将通过实例比较ASP.NET下的三种典型URL重写方案

    本讲将通过实例比较ASP.NET下的三种典型URL重写方案——ISAPI重写(使用开源组件IIRF),ASP.NET2.0内置的urlMappings和基于自定义HTTPModule的URL重写(使用NBear.Web中的UrlRewriteModule实现),并探讨URL重写中...

    北京中科信软 Visual Basic.NET培训

    四 Web应用(ASP.NET&XML; WebService ASP.NET 页面控制机制及编译模型,页面周期,常用控件,自定义控件,用户控件 MasterPage,主题与皮肤,站点导航,数据源控件,数据绑定 AJAX,数据缓存,个性化用户配置,Web...

    cms!NT2.0版本源码

    是基于.net2.0+SQL2000/2005/2008+XML+XSLT+AJAX技术构建的开源cms系统,服务器端采用当前最流行的动态网页开发语言ASP.NET(C#) 2.0编写,支持多种数据库,包括SQLSERVER2000\SQLSERVER2005\ORACLE\MYSQL\DB2\ACCESS...

Global site tag (gtag.js) - Google Analytics