ASP.NET 允许你创建符合可访问指南的 Web 页面。关于详细内容,参考[ASP.NET 的可访问支持]。
要在 ASP.NET 中创建可访问 Web 应用程序,你必须理解 ASP.NET 服务器控件是如何支持可访问的。在多数情况下,你必须配置控件或者创建符合可访问指南的标记。在少数情况下,ASP.NET 服务器控件不可以在必须百分之百符合 Web Content Accessibility Guidelines 1.0(WCAG)优先级 1 的应用程序中使用。在这种情况下,你必须避免使用控件。
ASP.NET 控件的可访问指南
下表列出了 ASP.NET 服务器控件和这些控件所提供的可访问支持的信息。如果控件没有在在该表中被列出,说明它的输出符合可访问指南,并且不需要任何配置。
控件 | 可访问支持 |
---|---|
AppearanceEditorPart | 该控件不生成与其相关联的 label 元素。 所有动作都生成相同的链接文字。 链接的替代文字被呈现,但不能够自定义。 该控件需要客户端脚本来运行。 该控件不呈现访问键或者制表索引设置。 |
BehaviorEditorPart | 该控件不生成与其相关联的 label 元素。 所有动作都生成相同的链接文字。 链接的替代文字被呈现,但不能够自定义。 该控件需要客户端脚本来运行。 该控件不呈现访问键或者制表索引设置。 |
BulletedList | 如果该控件的 DisplayMode 属性设置成 LinkButton,该控件就需要客户端脚本来运行。要避免客户端脚本的使用,可以创建模板并且为这些功能添加 Button 控件。 当控件的 BulletStyle 属性设置成 CustomImage 的时候,确保图片没有传达对于不能查看图片的用户不可用的意义。 设置链接的 Target 属性打开一个新窗口,这不是被可访问指南所建议的。 |
Button | 设置 OnClientClick 属性导致按钮依赖于客户端脚本。 |
Calendar | 该控件不呈现列中的 header,但是以一个 scope 来为标题呈现 th 元素。 该控件使用一个 HTML 表格来呈现布局,这不是被一些指南所建议的。设置该控件的 Caption 和 CaptionAlign 属性来为表格呈现一个标题,与可访问指南中所建议的一样。 该控件为导航而呈现 LinkButton 控件,从而需要客户端脚本来运行。要避免客户端脚本的需要,就要创建模板并且为这些功能添加 Button 控件。 |
CatalogZone | 该控件不生成与其相关联的 label 元素。 所有动作都生成相同的链接文字。 链接的替代文字被生成,但是不能自定义。 该控件需要客户端脚本来运行。 该控件不呈现访问键或者制表索引设置。 |
ChangePassword | 该控件需要客户端脚本来运行。 如果你配置该控件来使用图片,就要把相应的文字属性设置成适当的替代文字。例如,如果你把 ChangePasswordButtonType 属性设置成了 Image,就要把 ChangePasswordButtonText 属性设置成替代文字。 |
CheckBox | 把 AutoPostBack 属性设置成 true 会导致该控件需要客户端脚本。 |
CheckBoxList | 把 AutoPostBack 属性设置成 true 会导致该控件需要客户端脚本。 |
CreateUserWizard | 如果你配置该控件来使用图片,就要把相应的文字属性设置成适当的替代文字。例如,如果你把 CancelButtonType 设置成了 Image,就要把 CancelButtonText 属性设置成替代文字。 该控件中的按钮,比如 Submit 按钮和在步骤之间移动的链接,都需要客户端脚本。 |
DetailsView | 如果你创建了一个 ButtonField 列并且为该按钮指定了一个图片,你就不可以明确地为该图片指定替代文字。该图片会把对象的 Text 属性当成替代文字来使用。 该控件使用一个 HTML 表格来呈现布局,从而不是被一些指南所建议的,因为它不包括表格头信息。 如果你启用分页并且设置了 NextPageImageUrl 和 PreviousPageImageUrl 属性,你就不可以明确地为当作分布按钮而被使用的图片设置替代文字。而是使用 PagerTemplate 属性,因此你可以正确地定义分页的显示。 默认时,该控件使用 LinkButton 控件,从而需要客户端脚本来运行切换到编辑模式,分页,等等功能。要避免客户端脚本的需要,就要创建模板模板并且为这些功能添加 Button 控件。 当你把该控件的 AutoGenerateEditButton 属性设置成 true 并且没有相关联的 label 元素的时候会自动生成文本框。要避免这样,就要创建模板字段并且添加你自己的 Label 和 TextBox 控件,并且手动地关联它们。设置该控件的 Caption 和 CaptionAlign 属性来为该表格呈现一个标题,与可访问指南中被建议的一样。 |
DropDownList | 该控件不支持被建议的 ListItemGroup 来允许列表被划分成子区域。 把 AutoPostBack 属性设置成 true 会导致该控件需要客户端脚本。 |
EditorZone | 当图标被显示的时候,所有动作都会显示相同的替代文字。 该控件需要客户端脚本来运行。 该控件不呈现访问键或者制表索引设置。 该控件不生成与其相关联的 label 元素。 链接的替代文字被生成,但是不能自定义。 |
FormView | 该控件使用一个 HTML 表格来呈现布局,从而不是被一些指南所建议的,因为它不包括表格头信息。 默认时,该控件使用 LinkButton 控件,从而需要客户端脚本来运行切换到编辑模式,分页,等等功能。要避免客户端脚本的需要,就要使用 PagerTemplate 属性并且为这些功能添加 Button 控件。 设置该控件的 Caption 和 CaptionAlign 属性来为该表格呈现一个标题,与可访问指南中被建议的一样。 |
GridView | 把 RowHeaderColumn 属性设置成数据字段的名称并且把 UseAccessibleHeader 属性设置成 true 来让该控件呈现适应于可访问指南的信息。 如果你创建一个 ButtonField 对象并且为该按钮指定一个图片,你就不可以明确地为该图片指定替代文字。该图片会把对象的 Text 属性当作替代文字来使用。 设置该控件的 Caption 和 CaptionAlign 属性来为该表格呈现一个标题,与可访问指南中被建议的一样。 默认时,该控件使用 LinkButton 控件,从而需要客户端脚本来运行切换到编辑模式,分页,等等功能。要避免客户端脚本的需要,就要创建模板并且为这些功能添加 Button 控件。 如果你启用分页并且设置了 NextPageImageUrl 和 PreviousPageImageUrl 属性,你就不可以明确地为当作分页按钮而被使用的图片设置替代文字。而是使用 PagerTemplate 属性,因此你可以正确地定义分页的显示。 被用来实现编辑、选择,分页和其他更新功能的默认控件都需要客户端脚本。要避免这样,就要创建模板列并且手动地添加 Button 控件。 当你把该控件的 AutoGenerateEditButton 属性设置成 true 并且没有相关联的 label 元素的时候,会自动生成文字框。要避免这样,就要创建模板列并且添加你自己的 Label 控件和 TextBox 控件,并且手动关联它们。 如果你启用排序,那么列头中的链接就是 LinkButton 控件并且需要客户端脚本来运行。要避免客户端脚本的需要,就要创建模板并且为这些功能添加 Button 控件。 |
HyperLink | 如果你把 ImageUrl 属性设置成一个图片文件的 URL,就要设置 Text 属性来为结果图片指定替代文字。 为链接设置 Target 属性来打开新的窗口,不是可访问指南所建议的。 |
Image | 默认时,该控件不呈现替代文字。需要设置 AlternateText 属性。如果该图片没有功能用途,就要把 GenerateEmptyAlternateText 属性设置成 true 来呈现一个被设置成空字符串("")的 alt 特性,从而导致屏幕阅读器跳过该图片。 |
ImageButton | 该控件需要客户端脚本来运行。 默认时,该控件不呈现替代文字。需要设置 AlternateText 属性。 不要把 ImageButton 控件当成一个图片地图来使用,因为它不支持包括自身替代文字的区域。而使用 ImageMap 控件来替代。 |
ImageMap | 默认时,该控件不呈现替代文字。需要设置 AlternateText 属性。 如果你设置了该控件或者用来回传的单独热点的 HotSpotMode 属性,该控件就需要客户端脚本来运行。 为链接设置 Target 属性打开一个新窗口,不是被可访问指南所建议的。 |
Label | 要使用该控件来为文本框或者其他控件呈现一个 label,把 AssociatedControlID 属性设置成控件的 ID 来关联标签。 |
LayoutEditorPart | 始终包括其他 Web Parts 控件的 LayoutEditorPart 控件来实现页面的可访问。否则,用户只可以使用鼠标来拖动 Web Parts 控件。 该控件不生成与其相关联的 label 元素。 所有动作都生成相同的链接文字。 链接的替代文字被生成,但是不能自定义。 该控件需要客户端脚本来运行。 该控件不呈现访问键或者制表索引设置。 |
LinkButton | 该控件需要客户端脚本来运行。 不要把多个 LinkButton 控件的 Text 属性设置成相同的字符串,因为用户所依赖的屏幕阅读器将不能辨别按钮。 |
ListBox | 该控件不支持被建议的 ListItemGroup 来允许列表被划分成区域。 把 AutoPostBack 属性设置成 true 会导致控件需要客户端脚本。 |
Login | 当 LoginButtonType 属性被设置成 Image 的时候,LoginButtonText 属性的值就会当作替代文字被使用。 该控件不呈现访问键或者制表索引设置。 |
LoginName | 把 ToolTip 属性设置成类似于[已作为用户登入]的文字,因此屏幕阅读器将正确地解释该控件的文字。 |
LoginStatus | 该控件使用一个 LinkButton 控件来显示 Logout 链接,并且因此需要客户端脚本来运行。要避免客户端脚本的需要,就要创建模板并且为这些功能添加 Button 控件。 |
Menu | 把该控件的 SkipLinkText 属性设置成字符串来让控件呈现被建议的跳过导航链接。 该控件需要客户端脚本来运行。 在不支持控件的所有客户端功能的浏览器中,浏览器将刷新窗口来显示次要的导航,从而可能导致屏幕阅读器开始重新阅读该页面。 为链接设置 Target 属性打开新的窗口,从而不是被可访问指南所建议的。 该控件使用一个 HTML 表格来呈现布局,从而不是被一些指南所建议的。 配置该控件拥有鼠标指针的幻灯效果(比如创建快捷菜单)不是被可访问指南所建议的。 |
PageCatalogPart | 该控件不呈现与其相关联的 label 元素。 所有动作都生成相同的链接文字。 链接的替代文字被呈现,但是不能自定义。 控件需要客户端脚本来运行。 该控件不呈现访问键或者制表索引设置。 |
PasswordRecovery | 如果页面的 ClientTarget 属性被设置成 DownLevel,控件就需要客户端脚本来运行。 当 SubmitButtonType 属性被设置成 Image 的时候,SubmitButtonText 属性的值就会当作替代文字而被使用。 该控件不呈现访问键或者制表索引设置。 |
PropertyGridEditorPart | 该控件不生成与其相关联的 label 元素。 所有动作都生成相同的链接文字。 链接的替代文字被呈现,但是不能自定义。 该控件需要客户端脚本来运行。 该控件不呈现访问键或者制表索引设置。 |
RadioButton | 把 AutoPostBack 属性设置成 true 会导致该控件需要客户端脚本。 |
RadioButtonList | 把 AutoPostBack 属性设置成 true 会导致该控件需要客户端脚本。 |
SiteMapPath | 把该控件的 SkipLinkText 属性设置成字符串来让该控件呈现被建议的跳过导航链接。 在网站地图 XML 文件中,设置每个网站地图节点的 description 特性来为屏幕阅读器提供可识别的导航链接标题。 |
Table、TableRow、TableCell、TableHeaderCell,TableHeaderRow 和 TableFooterRow | 设置这些控件的 Caption 和 CaptionText 属性来为表格呈现一个标题,与可访问指南中所建议的一样。 当创建一个 Table 对象的时候,还应该包括 TableHeaderRow 和 TableHeaderCell 控件。 在 TableHeaderRow,Table 和 TableFooterRow 控件中,把 TableSection 属性设置成 TableBody,TableHeader 或者 TableFooter。这会导致这些控件分别呈现 thead,tbody 和 tfoot 元素。 在 TableCell 控件中,设置 AssociatatedHeaderCellID 属性来让该控件以它的标题来呈现与单元格相关联的 header。 设置这些控件的 Scope 属性把 header 关联到相应的数据列中。 |
TextBox | 把 AutoPostBack 属性设置成 true 会导致该控件需要客户端脚本。 |
TreeView | 把该控件的 SkipLinkText 属性设置成字符串来让该控件呈现被建议的跳过导航链接。 把节点的 PopulateOnDemand 属性设置成 true 会导致该控件表现一种与可访问指南不兼容的方式。 该控件需要客户端脚本来运行。 把 TreeView 控件或者单独节点的 Target 属性设置成 _blank 会导致该控件打开一个新窗口,从而不是被可访问指南所建议的。 |
WebPartZone | 该控件不生成与其相关联的 label 元素。 所有动作都生成相同的链接文字。 链接的替代文字被呈现,但是不能自定义。 该控件需要客户端脚本来运行。 该控件不呈现访问键或者制表索引设置。 如果你把 HelpMode 属性设置成 Modal 或者 Modeless,该控件就会打开一个新窗口,从而不是被可访问指南所建议的。 |
Wizard | 该控件为导航呈现 LinkButton 控件,从而需要客户端脚本来运行。要避免客户端脚本的需要,就要创建模板并且为这些功能添加 Button 控件。 |
验证控件 | 默认时,验证控件呈现客户端脚本来完成客户端验证。但是,因为内建的验证控件(除了 CustomValidator 控件)都会自动在服务器代码中完成多余的验证检查,你可以把 EnableClientScript 属性设置成 false 来避免呈现这些验证控件的客户端脚本。 把 Text 和 ErrorMessage 属性设置成有意义的错误消息。不要把它们设置成星号(*)。 |