使 ASP.NET Web 站点易于访问
Scott Mitchell
4guysfromRolla.com
Microsoft Corporation
适用于:
Microsoft ASP.NET 1.1
Microsoft ASP.NET 2.0
Microsoft Visual Studio .NET
摘要:利用 .NET Framework 中的继承扩展 ASP.NET 类,以使其生成残疾人完全可访问的 ASP.NET 代码。
单击此处可下载本文的代码示例。
本页内容
简介 | |
WAI、WCAG 和 Section 508 | |
用于 ASP.NET 1.x 的 Microsoft 易于访问的 ASP.NET Web 控件 | |
创建一个自适应的、易于访问的 DataGrid Web 控件 | |
在 ASP.NET Web 页中使用易于访问的 DataGrid 列类 | |
ASP.NET 2.0 中的可访问性 | |
相关书籍 |
简介
虽然大多数在线用户可以使用带有典型浏览器设置的 Web 浏览器来浏览 Web 站点,但是有残疾的用户通常使用其他方法来访问在线信息。举例来说,盲人用户可能使用一种纯文本浏览器,该浏览器可以将文本转换为盲文,或者使用屏幕阅读器大声朗读文本。一个有视觉障碍的人可能仍使用如 Internet Explorer 这样的浏览器,但要借助于屏幕放大镜或借助于配置为使用特大字体大小的浏览器。行动障碍可能阻碍了用户用鼠标或键盘作为输入设备。
因为有残疾的人通常使用特殊的设备或非标准的浏览器配置浏览 Web,所以,一个 Web 站点的整体设计和 HTML 标记极大地影响了残疾人的用户体验。比如说,用绝对度量单位(如 10pt)指定字体大小会以该绝对大小显示字体,并且与用户在其浏览器中配置的文本大小无关。有 Flash 或 Shockwave 界面而且不提供可替代的文本表示形式的站点,实际上拒绝了使用盲文设备或文字语音合成器的用户。一个 Web 站点只有设计为可正常转换到可替换的设备时,才能说是易于访问的。
此时,您也许会想:“我为什么要费心确保我的 Web 站点是易于访问的呢?”我想有两个主要原因:
1. |
这是一桩好生意 — 根据 2000 年美国人口普查,4,970 万美国人有残疾;Harris Interactive 2000 年 6 月所做的调查显示 43% 的美国残疾人是经常上网的用户,而且残疾用户上网花费的时间几乎是非残疾用户的两倍。把这两个调查的结果放在一起,您会发现有超过 2,100 万的美国残疾人经常上网。如果不花费时间来使您的 Web 站点易于访问,您会将 2,100 万潜在访问者拒之门外。 |
2. |
这是政府机构的指令 — 在 1998 年,美国政府通过了 Section 508 of the Rehabilitation Act,要求联邦机构的电子信息对于残疾人是可访问的。这一法案提供了软件应用程序、Web 应用程序以及电信产品和视频产品的可访问性准则。不仅要求联邦机构实施可访问性准则,而且还要求签约为联邦政府工作的私人公司也要做到这一点。(许多美国之外的国家/地区对政府机构也有类似的可访问性要求。)因此,如果您为政府或为给政府提供服务的公司工作的话,创建易于访问的 Web 应用程序是必须的。 |
在本文中,我们将讨论为确保您的 ASP.NET Web 站点易于访问可以采取哪些步骤。我们将简要地看一下目前可用的官方可访问性准则,然后着重看一下美国政府使用的可访问性准则。本文专注于考虑如何使用继承将不易于访问的 ASP.NET Web 控件变为满足可访问性准则的控件。
WAI、WCAG 和 Section 508
使一个 Web 站点更加易于访问有许多步骤,但是这些步骤到底是什么?一个站点需要使用其中的多少步骤才可视为易于访问的站点?根据您询问的对象以及他们需要提供的可访问性级别的不同,这些问题会有所不同。对一个财富 500 强 (Fortune 500) 公司的 Intranet 站点来说,它很可能比一个只有 25 名员工的公司的 Intranet 站点需要有更高级别的可访问性。
WC3 关于可访问性的说法
为了帮助将此讨论正式化,1999 年 WC3 官方成立了 Web Accessibility Initiative (WAI),这是分配了为残疾人提高 Web 站点可用性这一任务的一个团体。WAI 的第一个行动是发布了 Web Content Accessibility Guidelines (WCAG)。WCAG 提供了一个包括 14 条准则的列表,以便设计易于访问的 Web 站点。
准则本身并没有详细说明为使一个 Web 站点更加易于访问应采取的操作。确切地说,它们是对如何确保可访问性提供解释的高级别声明。举例来说,准则 1 是“对听觉和视觉内容提供等同的替代内容。”每一条准则都附带一组检查点。检查点详细说明了为确保满足可访问性准则而可采取的操作。每一个检查点被给予下列优先级值之一:
• |
优先级 1 — Web 开发者必须 满足这一检查点,否则一个或多个用户组将不能访问此内容。 |
• |
优先级 2 — Web 开发者应该 满足这一检查点,否则一个或多个用户组将发现难于访问此内容。 |
• |
优先级 3 — Web 开发者可以 满足这一检查点,否则一个或多个用户组在访问此内容时可能有困难。 |
除了列出这 14 条准则及其关联的、设置优先级的检查点之外,WCAG 还为 Web 站点的可访问性提供了三级分类等级。实现所有优先级 1 检查点的站点被评定为符合 A 级。实现所有优先级 1 和优先级 2 检查点的站点被评定为双 A 级,而实现所有检查点的站点被评定为三 A 级。WCAG 提供了一组很好的操作以便执行,这样确保了不同的可访问性级别。
对 WCAG 的详尽讨论超出了本文的范围。下面列出的是 WCAG 的 14 条高级别准则。每条准则的检查点及其关联的优先级可以在官方的 Web Content Accessibility Guidelines 1.0 specification 中找到。
1. |
对听觉和视觉内容提供等同的替代内容。 |
2. |
不要仅依靠颜色。 |
3. |
适当地使用标记和样式表。 |
4. |
阐明自然语言的使用。 |
5. |
创建正常转换的表格。 |
6. |
确保以新技术为特性的页面转换正常。 |
7. |
确保用户对时间敏感内容更改的控制。 |
8. |
确保嵌入式用户界面的直接可访问性。 |
9. |
进行与设备无关的设计。 |
10. |
使用过渡解决方案。 |
11. |
使用 W3C 技术和准则。 |
12. |
提供上下文和定向信息。 |
13. |
提供简洁的导航机制。 |
14. |
确保文档清楚简单。 |
美国政府的可访问性准则
在 1998 年,美国政府修改了康复法案 (Rehabilitation Act),制定了由联邦政府维护的电子和在线内容的可访问性规则。这些规则通常被称为“Section 508 规则”,这就是详细说明可访问性要求的康复法案的 Section 508。
注Section 508 的完整文本以及 FAQ、留言板和培训信息都可在 www.Section508.gov 上在线找到。其他关于 Section 508 的信息可在 www.access-board.gov/508.htm 上获得。
对于 Web 站点的可访问性,联邦政府有 16 条规则。前 11 条是来自 WCAG 的检查点,后 5 条是针对 Section 508 的,而不是 WCAG 的组成部分。这些规则可在 Section 508 的 1194.22 条款中找到,为了完整说明在这里重复一下:
1. |
对每一个非文本元素都应该提供一个等同的文本。 |
2. |
任何多媒体演示的等同替代内容都应该与该演示同步。 |
3. |
Web 页应该经过设计,以便所有通过颜色传达的信息无需颜色也可获得,比如通过上下文或者标记获得。 |
4. |
文档应该经过组织,这样它们无需关联的样式表也可阅读。 |
5. |
应该为服务器端图像映射的每个活动区域都提供冗余的文本链接。 |
6. |
应该提供客户端图像映射而非服务器端图像映射,除非区域不能使用可用的几何图形来定义。 |
7. |
应该为数据表标识行和列标题。 |
8. |
对于具有两个或多个逻辑层次的行或列标题的数据表,应该使用标记为这些数据标关联数据单元格和标题单元格。 |
9. |
应该使用有助于框架标识和导航的文本来为框架加上标题。 |
10. |
页面应该经过设计,以避免在频率大于 2 Hz 并小于 55 Hz 的情况下导致屏幕闪烁。 |
11. |
当以任何其他方法都无法达到符合性时,应该提供一个有等同信息或功能的纯文本页以使 Web 站点符合这部分的规定。只要主页面更改,纯文本页的内容就应该更新。 |
12. |
当页面使用脚本语言来显示内容或创建界面元素时,由脚本提供的信息应与辅助技术可以阅读的功能文本一致。 |
13. |
当 Web 页要求客户端系统上有小程序、插件或其他应用程序来解释页面内容时,该页必须提供一个到插件或小程序的链接。 |
14. |
当电子表单设计为在线完成时,该表单应该允许用户使用辅助技术来访问完成并提交表单所需的信息、字段元素和功能,包括所有的说明和提示。 |
15. |
应该提供一个方法允许用户跳过重复的导航链接。 |
16. |
当需要一个定时响应时,应该警告用户并给予其充分的时间以表示需要更多的时间。 |
这 16 条规则是由美国政府精心制定的,并只命令联邦机构的 Intranet 和 Internet Web 站点执行。但是,在命令政府机构的 Web 站点执行可访问性准则方面,美国并不是独一无二的。澳大利亚、加拿大、法国、德国、日本和英国等国家/地区也都有类似的法律。如需按国家/地区列出的可访问性政策的列表,请访问 WAI 的 Policies Relating to Web Accessibility 页。
检查是否符合可访问性
通过使用免费的 Bobby Online Portal,您可以快速确定一个给定的 Web 页是否符合 WCAG 或 Section 508。在此 Web 站点中,您可以输入一个 Web 页的 URL,选择检查或是符合 WCAG 或是符合 Section 508,然后查看列出符合性级别的报告。图 1 展示了 Bobby 在线门户 (Bobby Online Portal) 的屏幕截图,显示出在 Microsoft MSDN 主页上将要执行的一个 WCAG 符合性测试。
图 1. Bobby 在线门户
图 2 展示了 MSDN 主页报告的屏幕截图。如您所见,MSDN 页不符合 WCAG 可访问性准则的任何级别,因为它丢失了图像的可替代文本。图 2 中没有显示的是,还有 5 个优先级 2 的冲突和 4 个优先级 3 的冲突。
图 2. 评估 MSDN 页的可访问性
对于确定您的 Web 站点是否满足 WCAG 或 Section 508 的可访问性准则来说,Bobby 在线门户是一个很好的工具。遗憾的是,Bobby 在线门户每次只能处理一个 URL,每分钟也只允许执行一个查询。不过,有可用的商业产品可用于测试整个 Web 站点是否符合可访问性,并且不限定每分钟只执行一定数量的查询。有关这些商业产品的更多信息可以在 Bobby 在线门户站点上找到。
用于 ASP.NET 1.x 的 Microsoft 易于访问的 ASP.NET Web 控件
许多 WCAG 检查点和 Section 508 规则规定应该使用指定的 HTML 标记来使 Web 站点更加易于访问。举例来说,WCAG 中的检查点 5.1(一个优先级 1 的检查点)和 Section 508 中的规则 (7) 要求 <table> 元素正确标识行和列标题。也就是说,必须使用 元素标识数据单元格,而必须使用 标识标题。
当构建 ASP.NET Web 站点时,开发者几乎不必担心生成 HTML 标记。而是使用发出正确标记的 Web 控件。遗憾的是,许多 ASP.NET Web 控件发出的标记与由 WCAG 和 Section 508 规定的可访问性规则冲突。由于所有的 Web 控件是以 .NET Framework 中的一个类出现的,因此它们的功能可以通过多种方法扩展以符合可访问性准则。
关于增强现有 ASP.NET Web 控件以符合可访问性准则的一个好的例子便是 DataGrid Web 控件。.NET Framework 附带的 DataGrid Web 控件不 符合 Section 508 中的规则 (7) 以及 WCAG 中的检查点 5.1。也就是说,使用 元素而非 呈现标题。(要了解我所说的含义,请查看该现场演示,并在浏览器中查看“View”下的“Source”。您将看到标题行使用 <td> 而非 。)不过,在 2003 年 6 月,Microsoft 发布了 ASP.NET Hotfix Rollup Package,与其他软件包相比,它包括一个符合 Section 508 中规则 (7) 的改进版的 DataGrid。
注ASP.NET Hotfix Rollup Package 提供了其他与可访问性相关的增强功能。举例来说,它向 Label Web 控件中添加了一个可选的 AssociatedControlID 属性,以指定与 Label 关联的 Web 控件的 ID。如果提供了这一属性,Label 会作为 <label> HTML 元素呈现,并且其 for 属性引用指定的 Web 控件。有关更多信息,请参考 this knowledge base article。
创建一个自适应的、易于访问的 DataGrid Web 控件
2003 年 6 月发布的热修复程序中提供的 Web 控件,将 ASP.NET Web 控件提升到了符合 Section 508 的标准。但是,即便有了热修复程序,还是不能满足很多 WCAG 优先级 1 的检查点。幸运的是,您可以很容易地扩展现有 Web 控件的功能以符合您公司要求的可访问性准则。这可能应归功于继承的作用。特别是,我们可以使用不符合可访问性标准的 Web 控件,并创建一个符合标准的扩展 Web 控件。通过使用继承,我们只需更改或添加功能来使控件符合标准,而不必重写基本功能。
WCAG 检查点 6.3 中写到:“确保当脚本、小程序或者其他编程对象关闭或不受支持时,页面仍然可以使用。如果不可能做到这点,就在替代的可访问页面上提供等同的信息。举例来说,当脚本被关闭或不受支持时,确保触发脚本的链接正常(比如:不要使用“javascript:”作为链接目标)。”但是,LinkButton Web 控件是作为一个带有 javascript: 链接目标(<a href="javascript:__doPostBack('...','...')">...</a>)的超链接呈现的。问题是,不支持 JavaScript 的浏览器不能通过单击 LinkButton 回发 Web 页面。在不支持 JavaScript 的浏览器中,这使可排序的 DataGrid 呈现为不可排序,因为列标题是作为 LinkButton呈现的
本文的余下内容着眼于构建一组自适应的自定义 DataGrid 列,如果通过不支持 JavaScript 的浏览器访问,会在可排序的 DataGrid 的标题中显示一个 Button Web 控件。由于 Button Web 控件呈现<input type="submit">标记而非带有 javascript: 链接目标的超链接,因此,它可用于不支持 JavaScript 的浏览器。
注Section 508 要求链接使用 javascript: 链接目标。Section 508 中对客户端脚本的唯一注释可以在规则 (12) 中找到,其中写到:“页面使用脚本语言来显示内容,或者创建界面元素,由脚本提供的信息应该使用可通过辅助技术读取的功能文本进行标识。”这条规则要求的是:如果内容由脚本生成,或者如果一个页面的行为是通过脚本修改的,那么应该使用一个有解释脚本行为的 ≪script> HTML 元素。无论如何,我听一些从事政府项目的开发者说,还是要求他们支持没有 JavaScript 功能的浏览器。
使 DataGridColumn 能够自适应
DataGrid Web 控件是由许多列组成的,这些列是从 System.Web.UI.WebControls.DataGridColumn 类派生的类。ASP.NET 附带了 5 个内置 DataGrid 列类型:
1. |
BoundColumn |
2. |
ButtonColumn |
3. |
EditCommandColumn |
4. |
HyperLinkColumn |
5. |
TemplateColumn |
基类 DataGridColumn 提供了所有 DataGrid 列类型固有的属性和方法。这包括诸如 HeaderText、SortExpression¡¢Visible 以及其他属性。在创建 DataGrid 时,DataGridColumn 类有两个方法起着重要的作用:
• |
Initialize() — 初始化 DataGridColumn¡£在 DataGrid 的数据绑定过程中每列调用一次。 |
• |
InitializeCell(cell, index, itemType) — 在 DataGrid 的数据绑定过程中,为针对每列创建的每个单元格调用。Cell 是一个 TableCell 对象,它表示正在被初始化的单元格的实际 HTML <table> 单元格;index 是正在被初始化的单元格的行索引;itemType 是 ListItemType 枚举的值,指定在添加哪种类型的单元格(Item、AlternatingItem、Header、Footer、EditItem 等等)。 |
DataGridColumn 类负责呈现列的标题和脚注。BoundColumn、ButtonColumn 以及 EditCommandColumn 等派生类负责呈现DataGrid 项。
注有关创建自定义 DataGrid 列的更多信息,请查阅 Marcie Robillard 的文章 Creating Custom Columns for the ASP.NET DataGrid。
为了使我们的 DataGrid 根据用户的浏览器是否支持 JavaScript 来自适应地呈现标题,我们需要创建一个从 DataGridColumn 派生的自定义 DataGrid 类。这个名为 AccessibleDataGridColumn 的自定义 DataGrid 列类将需要重写 DataGridColumn 类的 InitializeCell() 方法,从而进行检查以查看 DataGrid 是否配置为可进行排序并可通过不支持 JavaScript 的浏览器来访问。如果这两个条件为真,那么 AccessibleDataGridColumn 将在标题中呈现 Button 而非 LinkButton。这个类的代码显示如下。
Public Class AccessibleDataGridColumn Inherits DataGridColumn Public Overrides Sub InitializeCell (ByVal cell As TableCell, _ ByVal columnIndex As Integer, ByVal itemType As ListItemType ) Dim sorting As Boolean = Not Me.Owner Is Nothing _ AndAlso Me.Owner.AllowSorting AndAlso Me.SortExpression.Length > 0 Dim supportsJS As Boolean = Not HttpContext.Current Is Nothing _ AndAlso HttpContext.Current.Request.Browser.JavaScript If sorting And Not supportsJS And _ itemType = ListItemType.Header And _ Not Me.DesignMode Then If Me.HeaderImageUrl.Length > 0 Then Dim b As New ImageButton b.AlternateText = Me.HeaderText b.ImageUrl = Me.HeaderImageUrl b.CommandName = "Sort" b.CommandArgument = Me.SortExpression b.CausesValidation = False cell.Controls.Add (b ) Else Dim b As New Button b.Text = Me.HeaderText b.CommandName = "Sort" b.CommandArgument = Me.SortExpression b.CausesValidation = False cell.Controls.Add (b ) End If Else MyBase.InitializeCell (cell, columnIndex, itemType ) End If End Sub End Class
重写过的 InitializeCell() 方法会进行检查,以查看排序是否启用,当前浏览器是否支持客户端 JavaScript,当前被初始化的项是否为标题以及呈现是否在 Visual Studio .NET 设计器中执行。如果这个检查通过了,接下来执行另一个检查以确定列是否有指定的 HeaderImageUrl 值。如果有,它会呈现一个 ImageButton,将它的 AlternateText 设置为列的 HeaderText。如果没有指定的 HeaderImageUrl,便会创建 Button 并将其添加到单元格中。
注请注意,进行检查以查看浏览器是否支持 JavaScript 时,只查找 Request.Browser.JavaScript 属性。这个属性是根据浏览器向 Web 服务器发送的 User-Agent 字符串设置的。当有人使用已知不支持 JavaScript 的浏览器(如 Netscape 1.0 或 Lynx)进行访问时,自适应的 DataGrid 将为可排序的 DataGrid 在标题中呈现 Button¡£如果有人使用 Internet Explorer 6.0 进行访问,即使访问者已经手动关闭了 JavaScript 支持,它也将呈现默认的 LinkButtons。
创建 AccessibleBoundColumn 类
在创建 AccessibleDataGridColumn 类之后,我们需要复制 5 个内置DataGrid 列类型(BoundColumn、ButtonColumn、EditCommandColumn 及其他类型)的功能,作为 5 个新的“易于访问的”DataGrid 列类型。我们之所以这样做是因为内置 DataGrid 列类型是从 DataGridColumn 派生的,而它不像我们的 AccessibleDataGridColumn 那样自适应地在标题中呈现 Button。幸运的是,创建可复制 5 个内置类功能的 5 个新类比较简单,只需要很少量的代码。
让我们逐步通过创建一个类的过程,该类可复制 BoundColumn 类的功能,但是从 AccessibleDataGridColumn 派生的。这个称为 AccessibleBoundColumn 的类如下所示(为了简化,一些不重要的语法已被删除)。
Public Class AccessibleBoundColumn Inherits AccessibleDataGridColumn Private bc As New BoundColumn Public Overrides Sub InitializeCell (ByVal cell As TableCell, _ ByVal columnIndex As Integer, ByVal itemType As ListItemType ) 'If this is a header or footer, initialize the cell ourselves via AccessibleDataGridColumn If itemType = ListItemType.Header _ Or itemType = ListItemType.Footer Then MyBase.InitializeCell (cell, columnIndex, itemType ) Else bc.InitializeCell (cell, columnIndex, itemType ) End If End Sub #Region "Public Properties" _ Public Property DataField ( ) As String Get Return bc.DataField End Get Set (ByVal Value As String ) bc.DataField = Value End Set End Property _ Public Property DataFormatString ( ) As String Get Return bc.DataFormatString End Get Set (ByVal Value As String ) bc.DataFormatString = Value End Set End Property _ Public Property [ReadOnly] ( ) As Boolean Get Return bc.ReadOnly End Get Set (ByVal Value As Boolean ) bc.ReadOnly = Value End Set End Property #End Region End Class
复制 5 个内置 DataGrid 列类的功能几乎不花时间,因为你只要把费力的工作委托给适当列类型的私有成员实例即可。举例来说,在 AccessibleBoundColumn 类中,BoundColumn 类型就有一个称为 bc 的私有成员变量。AccessibleBoundColumn 至少需要公开与 BoundColumn 类相同的属性,尽管这些属性完全可通过内部 BoundColumn 中的相同属性直接读写。
InitializeCell() 方法也被重写了,因为我们想让 DataGrid 的项通过内部 BoundColumn 来呈现,同时使标题(以及脚注)通过 AccessibleDataGridColumn 来呈现。然后,InitializeCell() 方法只进行检查以查看正在初始化哪种类型的项,并将初始化责任委托给基类 (AccessibleDataGridColumn) 或内部 BoundColumn。
注与本文关联的下载包括 AccessibleDataGridColumn 和 AccessibleBoundColumn 的完整源代码,还包括 AccessibleButtonColumn 的源代码。我把它留给读者作为练习来创建剩下的 DataGrid 列类,这些列类是复制后三个内置 DataGrid 列的功能所需的。
在 ASP.NET Web 页中使用易于访问的 DataGrid 列类
本文的下载包含了两个 Visual Studio .NET 2003 项目(两个都是 Visual Basic .NET 项目):第一个是包含自定义 DataGrid 列类的类库;第二个是一个 ASP.NET Web 应用程序,您可以用它测试出自适应的、易于访问的 DataGrid 列类。
要在 ASP.NET Web 项目中使用这些自定义 DataGrid 列类,您需要先将已编译的自定义 DataGrid 列类程序集添加到 ASP.NET Web 项目的 /bin 文件夹中。(如果您使用的是 Visual Studio .NET,完成这项工作的最简单方法就是在解决方案资源管理器中将程序集添加到 References 文件夹中。)接下来,您需要在 ASP.NET Web 页顶部添加一个 @References 指令,它将按如下方式使用这些 DataGrid 列。
<%@ Register TagPrefix="accessibility" Namespace="AccessibilityControls" Assembly="AccessibilityControls" %>
最后,要使用列,请将 DataGrid 添加到 ASP.NET Web 页中并将 AutoGenerateColumns 属性设置为 False。在 HTML 部分中,添加下列语法。
<asp:DataGrid runat="server" AutoGenerateColumns="False" ...> <Columns> <accessibility:AccessibleBoundColumn DataField="FieldName" ...> </accessibility:AccessibleBoundColumn> ... </Columns> </asp:DataGrid>
这就是所有的步骤!图 3 展示了使用 AccessibleBoundColumn 和 AccessibleButonColumn 列类的 ASP.NET Web 页的 HTML 部分的屏幕截图。图 4 展示了同一页面的设计视图的屏幕截图。
图 3. 使用 AccessibleBoundColumn
图 4. 设计器中的 AccessibleBoundColumn
请注意,在 Visual Studio .NET 设计器中,带有自定义的、易于访问的列的 DataGrid 看起来与普通的一样。而且,如果您通过支持 JavaScript 的浏览器查看页面(如图 5 所示),DataGrid 将如常呈现,在列标题和 ButtonColumn 中具有 LinkButtons但是,如果您使用不支持 JavaScript 的浏览器(如 Netscape 1.0)来访问页面,ButtonColumn 和列标题将会作为 Buttons 呈现(见图 6)。
图 5. 上级浏览器中的 AccessibleBoundColumn
图 6. 较早版本浏览器中的 AccessibleBoundColumn
ASP.NET 2.0 中的可访问性
在下一版的 ASP.NET(代号为 Whidbey)中发布的 ASP.NET 服务器控件,将默认自动生成符合 Section 508 的标记。而且,这些服务器控件也将发出符合 WCAG 的标记。为了实现这个目标,Visual Studio 2005 将附带一个外接程序来自动检查 HTML 标记是否符合 Section 508 和 WCAG。有关这些令人振奋的新增功能的更多信息,请查阅 XHTML and Accessibility in ASP.NET Whidbey 以及来自 Scott Guthrie(Microsoft ASP.NET 团队的联合创始人)的 blog 公告。
有关 Web 站点可访问性的更多信息,请务必查阅 Microsoft Accessibility 主页:www.microsoft.com/enable/。还要查阅 Section 508 page 以获得关于各种 Microsoft 产品如何满足 Section 508 标准的资源。
关于作者
Scott Mitchell 著有 5 本书并且是 4GuysFromRolla.com 的创始人,在过去的六年中一直致力于 Microsoft Web 技术工作。Scott 身兼独立顾问、培训师以及作家等数职。您可以通过 mitchell@4guysfromrolla.com 或者通过他在 ScottOnWriting.NET 上的 blog 和他取得联系。