ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

ASP.NET 可以帮助你创建能够被残疾人士所访问的 Web 应用程序。可访问 Web 应用程序允许人们使用辅助技术(比如屏幕阅读器),来与 Web 页面交互。可访问 Web 应用程序有下列优点:

  • 它们对于广大的现有听众是可用的。
  • 它们通常包括了有益于用户的设计原则,不仅仅是那些残疾人士。
  • 它们适合许多需要所有 Web 应用程序是可访问的制度需求。

理解可访问指南以及 ASP.NET 如何帮助你遵守这些指南,你可以创建更容易与残疾人士进行交互的应用程序。

可访问指南

不同的组织公布了如何创建可访问应用程序的指南。下面列出了人们所熟知的指南:

  • Web Content Accessibility Guidelines 1.0(WCAG)。

    这些标准由 World Wide Web Consortium(W3C)所开发并且是许多其他可访问标准的基础。其中包括了由世界范围内的政府所使用的可访问标准。

    关于 Web 内容可访问指南,转到 World Wide Web Consortium(W3C)Web 站点。

    WCAG 指南定义了不同的优先级别,为每种指南相关联的检查点使用了从 1 到 3 的等级。一些公共机制需要所有 Web 站点都遵循优先级 1 和优先级 2 检查点。

  • 508 部分。

    United States 政府在 Rehabilitation Act 的 508 部分中定义了可访问标准,与 WCAG 类似。

    关于 508 部分指南,转到 http://www.section508.gov。

  • Microsoft 可访问指南。

    关于 Microsoft 可访问指南,转到 Microsoft Accessibility 和 MSDN Library 并且搜索[Web 的可访问设计指南]。

测试可访问

在有限的范围中,你可以测试 Web 页面如何使用多种可用的第三方工具来遵守可访问标准。

如果你拥有一个开发环境(比如 Microsoft Visual Studio 2005),这个开发环境就有可能提供了可访问测试工具。关于更多信息,查看产品信息。但是,设计时的可访问验证工具并不测试被动态生成的输出,比如由 ASP.NET 服务器控件或者由你自己的代码所呈现的标记。你应该测试你的页面输出,除了使用设计时可访问验证工具之外。

自动化的可访问测试不能完成页面或者 Web 站点的所有可访问诊断。许多关于可访问的指南需要你进行判断来检测是否将来的页面遵守了这些指南。例如,一种自动化测试可以检测你是否为页面中的所有图片都提供了 alt 文字。但是,自动化测试不能检查 alt 文字是否正确地描述了图片。类似地,一种自动化测试不能客观地检测你在页面中为需要高对比文字的读者而使用了能够形成足够对比的色彩。因此,要创建真实的可访问应用程序,你必须对指南的细节非常熟悉并且专注于此,这样你才可以创建适合于可访问指南的页面。关于不是通过工具而完成的另一个可访问检查范例就是只有图形的图片都必须拥有 alt 文字,比如圆角表格边框。否则,屏幕阅读器将阅读图片文件。如果 alt 文字为空,屏幕阅读器将会适当地跳过这个图片。

ASP.NET 中的可访问特征

在大部分时间内,ASP.NET 既会呈现适合于可访问标准的页面标记结果又会暴露可以通过设置来获取页面可访问的属性。但是,有时候 ASP.NET 控件会呈现并不遵守全部可访问标准的输出。关于详细信息,请参考[ASP.NET 控件和可访问]。

支持可访问的常规控件特征

通常,ASP.NET 控件适合于下列方式中的可访问需求:

  • 为任何非文字元素提供一种方式来指定等价的文字。
  • 不要依赖于色彩。
  • 呈现表格的标题和列头。
  • 呈现拥有 div 元素的 fieldset 和 legend 元素。
  • 不需要样式表单。
  • 支持使用样式属性的定位。
  • 把标签关联到控件。
  • 常规的客户端脚本是独立于设备的;例如,不单单只响应鼠标点击的脚本。
键盘访问

一种重要的可访问特征就是页面应该可用于可选择的输入窗体的功能。在实际的条件下,这表示任何可以通过鼠标而被完成的任务同样可以通过键盘而被完成。

ASP.NET 允许你通过下列方式来为你的页面包括键盘支持:

  • 你可以使用 TabIndex 属性来设置控件的制表顺序。
  • 你可以设置 DefaultButton 属性来指定窗体或者 Panel 控件的默认按钮。
  • 你既可以使用方法(比如 SetFocus)也可以设置 DefaultFocus 属性来为窗体设置输入控件的焦点。
  • 你可以设置 AccessKey 属性来定义按钮控件的访问键。
  • 你可以使用带有文本框的 Label 控件,从而允许你为文本框定义访问键。

    关于详细信息,请访问[实践:把 Web 服务器控件 Label 当成标题使用]。

图片与替代文字

可访问指南建议为页面中有功能用途的图片提供有意义的替代文字,比如扮演按钮的图片或者被数据控件呈现的图片。这允许屏幕阅读器报告页面中有什么图片。如果是没有功能用途的装饰图片,替代文字应该被设置成空字符串,因此屏幕阅读器会跳过该图片。

默认时,因为 Image,ImageButton 和 ImageMap 控件都不能自动生成有意义的文字,这些控件也都不会呈现任何替代文字。而是由你自己来提供这些文字。可访问检查器会把没有替代文字的图片控件标记成违反指南的元素。

关于图片控件,你应该为该控件做下列事情之一:

  • 把 AlternateText 属性设置成有意义的文字。
  • 把 GenerateEmptyAlternateText 属性设置成 true 来导致 ASP.NET Image 控件把空字符串呈现成替代文字。空的替代文字会被可访问检查器认为你是故意把图片标记成不重要的。
原生图片控件或者原生链接控件

一些控件,比如 TreeView 控件,Menu 控件和 Web Parts 控件,把图片或者链接呈现成它们的一部分标记。在这些情况下,控件为每个对它的功能进行描述的图片或者链接都创建了替代文字。

例如,TreeView 控件为每个节点的展开和收缩按钮都呈现了图片。TreeView 控件为这些基于节点文字的图片而生成了替代文字。默认时,使用文字 Start 并且用来扩展节点的图片替代文字被呈现成 Expand Start。你可以设置 TreeView 控件的 ExpandImageToolTip 和 CollapseImageToolTip 属性来指定你自己的替代文字。

类似地,Menu 命令呈现了它生成用来展开和收缩菜单项的链接替代文字。Web Parts 控件的标题栏按钮也类似地呈现了替代文字来描述每个按钮的功能。

跳过反复的链接

辅助技术设备(比如屏幕阅读器),必须按照页面中所出现的顺序来列举页面中的每个链接。有时候,比如控件页中用来呈现在每个页面顶端的菜单,屏幕阅读器在获取页面的主要内容之前都将被强迫阅读每个页面中的所有入口。关于这种情况,可访问指南建议为用户提供一种方式来跳过重复的链接列表。下列控件实现了一种方式来跳过重复的链接:

  • CreateUserWizard
  • Menu
  • SiteMapPath
  • TreeView
  • Wizard

这些控件每种都支持一个 SkipLinkText 属性。如果这个属性没有设置成字符串(可以包括任何文字),控件会在包括拥有替代文字并且不可见的 .gif 图片的链接前面呈现一个锚点。默认时,替代文字就是 Skip Navigation Links,但是你可以配置这个文字。这个锚点链接到了其他追随该控件的锚点。这允许屏幕阅读器和类似技术提供给用户一个机会来跳过由控件所生成的链接,没有可视化页面显示的视觉妨碍。如果 SkipLinkText 属性被设置成一个空字符串,控件就不会呈现锚点标记。

呈现表格的控件

可访问指南建议的 HTML 表格包括如下:

  • 一个帮助辅助技术识别表格用途的标题。
  • 一种识别列头的方式。

如果你使用 Table 控件来创建表格,你可以明确地设置它的 Caption 属性。你可以使用 TableHeaderRow 类来创建表格头,把 TableSection 属性设置成 TableRowSection 类的 TableHeader 枚举。这导致表格呈现一个 thead 元素。当你用 TableCell 控件创建单元格的时候,你可以把每个单元格的 AssociateHeaderCellID 属性设置成表格头单元格的 ID。这导致单元格以相应的列头来呈现一个与单元格相关联的 header 特性。

下列 ASP.NET 服务器控件可以呈现 HTML 表格:

  • Calendar
  • DetailsView
  • FormView
  • GridView

这些控件允许你设置 Caption 和 CaptionAlign 属性来创建结果表格的建议标题。

关于这些控件,如果你设置 UseAccessibleHeader 属性,控件就会呈现拥有 scope 特性的 th 元素来识别列头。

两个额外的控件,DataList 和 Repeater 控件,不自动呈现 thread 或者 th 元素。但是,你可以为这些控件定义头模板。关于 DataList 控件,头模板会呈现 th 元素。Repeater 控件不自动呈现任何标记;你可以为该控件定义头模板,主体模板和脚模板,你甚至可以指定任何标记。如果你指定 Repeater 控件应该呈现一个 HTML 表格,你就应该包括适当的标记来适合可访问标准。

呈现 div 元素的控件

可访问指南建议把长窗体进行划分来让它们更加易于导航。HTML 4.0 引入了 fieldset 和 legend 元素来允许 Web 页面开发者把窗体划分成不同的部分。

在 ASP.NET 中,你可以使用 Panel 控件来创建窗体的子分区。如果你把该控件的 GroupingText 属性设置成一个字符串,Panel 控件就会呈现 div 元素,该元素为内容包含了 fieldset 元素和一个拥有在 GroupingText 属性中被使用的字符串的 legend 元素。

一些 Web Parts 控件同样会呈现 div 元素。这些控件会自动呈现 fieldset 和 legend 元素。

验证控件

当一个入口是必需的或者如果用户在数据入口中产生错误的时候,多数 Web 页面都会在文本框的旁边显示一个星号(*)。因为一个星号所代表的意义并不多,你应该始终在验证控件的 Text 和 ErrorMessage 属性中指定有意义的错误消息。

另外,验证器控件还应该禁用客户端脚本(EnableClientScript=false)。

登入控件

登入控件(比如 Login、ChangePassword,PasswordRecovery 和 CreateUserWizard 控件),包括其他控件(比如 Label,TextBox 和验证控件)。因为你,作为 Web 页面的开发者,不需要直接控制登入控件所呈现的内容,该控件是遵循可访问原则而被设计的。例如,该控件展示了下列行为来支持可访问:

  • 与标签相关联的文本框。
  • 拥有制表索引设置的输入控件。

但是,如果你为这些登入控件创建模板,你就必须在模板中配置控件,因此该控件遵守了可访问指南。

客户端脚本和 ASP.NET 控件

WCAG 标准建议页面不要为任何功能用途而使用客户端脚本,只用于非实质的效果,比如鼠标经过。508 部分指南则允许使用客户端脚本,如果辅助技术可以与任何由脚本所返回的值互动的话。

几个 ASP.NET Web 服务器控件依赖于客户端脚本。例如:

  • LinkButton 与 ImageButton 控件需要客户端脚本来完成回传。
  • Calendar 控件需要客户端脚本来支持日期链接的点击。
  • Web Parts 控件依赖于客户端脚本来关闭,最小化和编辑链接。

关于使用客户端脚本的完整控件列表,请参考[使用客户端脚本的 ASP.NET Web 服务器控件]。

因此,如果你在需要客户端脚本的页面中使用任何控件,你的页面将不再符合 WCAG 标准。如果你的 Web 应用程序必须百分之百地适应于 WCAG 标准,你就不可以在依赖于客户端脚本的页面中使用任何控件。但是,这些控件并不遵守关于在页面中使用客户端脚本的 508 部分标准。

posted on 2007-03-21 22:59  Laeb  阅读(615)  评论(0编辑  收藏  举报