使 ASP.NET Web 站点变得可访问

使 ASP.NET Web 站点变得可访问

发布日期: 6/22/2004 | 更新日期: 6/22/2004

Scott Mitchell

4guysfromRolla.com

适用于:
Microsoft ASP.NET
Microsoft .NET 框架
Microsoft Visual Studio.NET

摘要:利用 .NET 框架中的继承机制来扩展 ASP.NET 类,以使其生成残疾人完全可访问的 ASP.NET 代码。

下载代码示例

本页内容
简介简介
WAI、WCAG 和 Section 508WAI、WCAG 和 Section 508
Microsoft 用于 ASP.NET 1.x 的可访问 ASP.NET Web 控件Microsoft 用于 ASP.NET 1.x 的可访问 ASP.NET Web 控件
创建自适应的可访问 DataGrid Web 控件创建自适应的可访问 DataGrid Web 控件
在 ASP.NET Web 页中使用可访问的 DataGrid 列类在 ASP.NET Web 页中使用可访问的 DataGrid 列类
ASP.NET Whidbey 中的可访问性ASP.NET Whidbey 中的可访问性
相关书籍相关书籍

简介

尽管大多数在线用户能够使用具有典型浏览器设置的 Web 浏览器浏览 Web 站点,但残疾用户却通常使用替代手段来访问在线信息。例如,盲人可能使用能够将文本转换为盲文的纯文本浏览器,或者使用屏幕阅读器来朗读文本。视力下降的用户可能仍然使用像 Microsoft? Internet Explorer 这样的浏览器,但需要借助于屏幕放大镜,或配置为使用特大字号的浏览器。行动上的不便可能会妨碍用户使用鼠标或键盘作为输入设备。

因为残疾人通常使用特殊设备或非标准的浏览器配置来浏览网页,所以 Web 站点的总体设计和 HTML 标记会极大地影响残疾人的用户体验。例如,如果使用绝对尺寸(如 10pt)指定字体大小,则屏幕会以该绝对尺寸显示字体,而不是相对于用户在其浏览器中配置的文本大小来显示字体。如果站点具有 Flash 或 Shockwave 界面,并且未提供备选的文本表示形式,则实际上会拒绝使用盲文设备或文本到语音合成器的用户访问。如果一个 Web 站点能够恰当地转换到备用设备,则称它是“可访问的”。

此刻您可能在想:“我为什么要确保我的 Web 站点是可访问的呢?”据我所知,有两个非常正当的理由:

1.

这是一种良好的经营策略 — 根据 U.S. Census 2000 的调查,4,970 万美国人身体有残疾;Harris Interactive 在 2000 年 6 月进行的调查表明 43% 的美国残疾人是固定的在线用户,并且有残疾的用户在网上花费的时间几乎是没有残疾的用户的两倍。将这两项调查的结果综合起来,您会发现有 2,100 万以上的美国残疾人经常上网。如果不花些时间使您的 Web 站点变得可访问,您将会失去 2,100 万潜在访问者。

2.

这是政府机构的强制性要求 — 在 1998 年,美国政府通过了康复法案 (Rehabilitation Act) 的第 508 节 (Section 508),要求联邦机构使其电子信息可供残疾人访问。该法令同时为软件应用程序和 Web 应用程序以及电信产品和视频产品提供了可访问性准则。不仅联邦机构需要实施可访问性准则,与联邦政府签约工作的私人企业也需要实施这一准则。(除美国以外的许多国家/地区也对政府机构具有类似的可访问性要求。)因此,如果您为政府工作或者为一家向政府提供服务的公司工作,则需要创建可访问的 Web 应用程序。

在本文中,我们将讨论您可以采取哪些步骤来确保您的 Microsoft? ASP.NET Web 站点是可访问的。我们将简要查看一下目前的官方可访问性准则,然后集中讨论美国政府使用的可访问性准则。本文最后将讨论如何使用继承机制将不可访问的 ASP.NET Web 控件转换为符合可访问性准则的控件。

WAI、WCAG 和 Section 508

可以采取许多步骤使 Web 站点具有更高的可访问性。但究竟是哪些步骤?一个站点需要利用其中的多少个步骤才能被视为可访问的?这些问题的答案随询问的对象以及需要提供的可访问性级别的不同而不同。“财富 500 强”企业的 Intranet 站点所需要的可访问性级别可能要比只有 25 名员工的企业的 Intranet 站点高。

WC3 中有关可访问性的陈述

为了有助于该提议合法化,WC3 在 1999 年正式成立了 Web Accessibility Initiative (WAI),该任务组的职责是为残疾人提高 Web 站点的可用性。WAI 的第一个措施是发布 Web Content Accessibility Guidelines,即 WCAG。WCAG 为可访问的 Web 站点设计提供了 14 条准则。

这些准则本身并未详细说明需要采取哪些行动以使 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 规范中找到每条准则的检查点及其关联的优先级。

1.

为听觉和视觉内容提供等效的替换选择

2.

不要单纯依赖颜色

3.

使用标记和样式表并保证恰当使用

4.

使用自然语言时应表达清晰

5.

创建能够恰当转换的表格

6.

确保采用新技术的页面能够恰当转换

7.

确保用户能够控制时间敏感性内容的更改

8.

确保嵌入式用户界面的直接可访问性

9.

针对设备独立性进行设计

10.

使用临时解决方案

11.

使用 W3C 技术和准则

12.

提供上下文和方向信息

13.

提供畅通无阻的导航机制

14.

确保文档明白易懂

美国政府的可访问性准则

在 1998 年,美国政府修正了康复法案,对联邦政府维护的电子和在线内容订立了可访问性规则。这些规则通常称为“Section 508 规则”,因为是由康复法案的第 508 节详细说明了可访问性要求。

Section 508 的全文以及常见问题解答、留言板和培训信息都可以通过在线方式在 www.Section508.gov 上找到。其他 Section 508 信息位于 http://www.access-board.gov/508.htm 上。

联邦政府具有16 条 Web 站点可访问性规则。前 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 Online Portal 的一个屏幕快照,内容为即将对 Microsoft MSDN 主页执行的 WCAG 符合性测试。


1.Bobby Online Portal

图 2 显示了 MSDN 主页报告的屏幕快照。正如您所看到的,该 MSDN 页不符合 WCAG 可访问性准则的任何级别,因为它缺少图像的替代文本。虽然在图 2 中没有显示,但还有五处违反了优先级 2 检查点,有四处违反了优先级 3 检查点。


2. 评估 MSDN 页的可访问性

Bobby Online Portal 是一种相当不错的工具,可用来确定您的 Web 站点是否符合 WCAG 或 Section 508 可访问性准则。遗憾的是,Bobby Online Portal 一次只能处理一个 URL,并且每分钟只允许执行一个查询。不过,可以使用商业产品来测试整个 Web 站点的可访问性符合性,并且不会受到每分钟只能执行一定数量的查询的限制。有关这些商业产品的详细信息,请访问 Bobby Online Portal 站点。

Microsoft 用于 ASP.NET 1.x 的可访问 ASP.NET Web 控件

许多 WCAG 检查点和 Section 508 规则都要求使用特定的 HTML 标记来使 Web 站点具有更高的可访问性。例如,WCAG 中的检查点 5.1(它是一个优先级 1 检查点)和 Section 508 中的规则 (g) 要求使用 <table> 元素来正确标识行标头与列标头。也就是说,必须使用 <td> 元素来标识数据单元格,并且必须使用 <th> 来标识标头。

在构建 ASP.NET Web 站点时,开发人员很少需要关心如何生成 HTML 标记。开发人员可以使用 Web 控件来生成正确的标记。遗憾的是,许多 ASP.NET Web 控件生成的标记违反了 WCAG 和 Section 508 中描述的可访问性规则。因为所有 Web 控件在本质上都是 Microsoft?.NET 框架中的类,所以可以用多种方法来扩展它们的功能,以使其符合可访问性准则。

DataGrid Web 控件就是一个对现有 ASP.NET Web 控件进行功能增强,以符合可访问性准则的典型示例。.NET 框架随附的 DataGrid Web 控件不 符合 Section 508 中的规则 (g)/WCAG 中的检查点 5.1。也就是说,标头是使用 元素而不是 元素呈现的。(要明白我的意思,请参阅这一实况播放的演示,然后在浏览器中依次选择“View”和“Source”。您将看到标头行使用了 而不是 。)然而,在 2003 年 6 月,Microsoft 发布了 ASP.NET Hotfix Rollup Package,该软件包所包含的内容中有一个改进版本的 DataGrid,它符合 Section 508 中的规则 (g)。

ASP.NET Hotfix Rollup Package 提供了其他与可访问性相关的增强功能。例如,它向 Label Web 控件添加了可选的 AssociatedControlID 属性,以指定与该 Label 关联的 Web 控件的 ID。如果提供了该属性,Label 将被呈现为 <label> HTML 元素,并且该元素的 for 属性引用指定的 Web 控件。有关详细信息,请参阅该知识库文章

创建自适应的可访问 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 页。这使得可排序的 DataGrid 在不支持 JavaScript 的浏览器中变得不可排序,这是因为列标头被呈现为 LinkButton。

本文的其余部分将探究如何生成一组自适应的自定义 DataGrid 列,这些列将在可排序的 DataGrid 被不支持 JavaScript 的浏览器访问时,在其标头中显示一个 Button Web 控件。该 Button Web 控件对不支持 JavaScript 的浏览器有效,因为它呈现<input type="submit"> 标记而不是带有 javascript: 链接目标的超链接。

Section 508 没有要求链接不得使用 javascript: 链接目标。Section 508 对客户端脚本的唯一说明位于规则 (l) 中,其内容为:“当页面利用脚本语言来显示内容或创建界面元素时,应该用可通过辅助技术阅读的实用文本来标识脚本所提供的信息。”该规则的要求是:如果内容是通过脚本生成的,或者页面的行为是通过脚本修改的,则应使用 <noscript> HTML 元素并附加有关脚本行为的解释。无论如何,我已经收到多位从事政府项目的开发人员的来信,说他们被要求支持不带 JavaScript 功能的浏览器。

使 DataGridColumn 自适应

DataGrid Web 控件由多个列组成,这些列是派生自 System.Web.UI.WebControls.DataGridColumn 类的类。ASP.NET 随附了五个内置的 DataGrid 列类型:

1.

BoundColumn

2.

ButtonColumn

3.

EditCommandColumn

4.

HyperLinkColumn

5.

TemplateColumn

基类 DataGridColumn 提供了所有 DataGrid 列类型所固有的属性和方法。这包括 HeaderTextSortExpressionVisible 以及其他属性。DataGridColumn 类具有两个在创建 DataGrid 时发挥重要作用的方法:

?

Initialize() — 初始化 DataGridColumn。在 DataGrid 的数据绑定过程中,对每个列调用一次。

?

InitializeCell(cell, index, itemType) — 在 DataGrid 的数据绑定过程中,针对所创建的每个列的每个单元格进行调用。Cell 是一个 TableCell 对象,表示被初始化单元格的实际 HTML 单元格;index 是被初始化单元格的行索引;itemType 是 ListItemType 枚举中的值,用于指定要添加的单元格的类型(Item、AlternatingItem、Header、Footer、EditItem 等)。

DataGridColumn 类负责呈现列的标头和脚注。派生类 BoundColumnButtonColumnEditCommandColumn 等负责呈现 DataGrid 项。

有关创建自定义 DataGrid 列的详细信息,请参阅 Marcie Robillard 的文章 Creating Custom Columns for the ASP.NET DataGrid

要使我们的 DataGrid 能够根据用户的浏览器是否支持 JavaScript 来自适应性地呈现标头,需要创建派生自 DataGridColumn 的自定义 DataGrid 类。该自定义 DataGrid 列类名为 AccessibleDataGridColumn,它需要重写 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,当前正在初始化的项是否为标头,以及呈现操作是否不是在 Microsoft?Visual Studio?.NET 的设计器中执行。如果检查通过,则将执行另一项检查以确定该列是否指定了 HeaderImageUrl 值。如果指定了该值,则它将呈现一个 ImageButton,并将其 AlternateText 设置为该列的 HeaderText。如果未指定 HeaderImageUrl,则会创建一个 Button 并将其添加到单元格中。

请注意,在检查浏览器是否支持 JavaScript 时,只是检查 Request.Browser.JavaScript 属性。该属性基于浏览器发送到 Web 服务器的 User-Agent 字符串进行设置。当用户通过已知的不支持 JavaScript 的浏览器(如 Netscape 1.0 或 Lynx)进行访问时,自适应的 DataGrid 将在可排序 DataGrid 的标头中呈现 Button。如果用户通过 Microsoft?Internet Explorer 6.0 进行访问,它将呈现默认的 LinkButton,即使访问者已经手动关闭了 JavaScript 支持。

创建 AccessibleBoundColumn 类

在创建 AccessibleDataGridColumn 类之后,我们需要将五个内置 DataGrid 列类型(BoundColumn、ButtonColumn、EditCommandColumn 等)的功能复制为五个新的“可访问的”DataGrid 列类型。这是因为内置的 DataGrid 列类型派生自 DataGridColumn,而后者不会像 AccessibleDataGridColumn 一样在标头中自适应地呈现 Button。幸而,创建五个新类并复制五个内置类的功能相当简单,并且只需少量代码。

让我们逐步完成创建一个复制 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" <DefaultValue("")> _ Public Property DataField() As String Get Return bc.DataField End Get Set(ByVal Value As String) bc.DataField = Value End Set End Property <DefaultValue("")> _ Public Property DataFormatString() As String Get Return bc.DataFormatString End Get Set(ByVal Value As String) bc.DataFormatString = Value End Set End Property <DefaultValue(False)> _ 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 

复制五个内置 DataGrid 列类的功能几乎不用花费时间,因为您只需将繁重的工作委托给相应列类型的私有成员实例。例如,在 AccessibleBoundColumn 类中,有一个名为 bc、类型为 BoundColumn 的私有成员变量。AccessibleBoundColumn 至少需要公开与 BoundColumn 类相同的属性。尽管这些属性只是简单地直接读写内部 BoundColumn 的相同属性。

InitializeCell() 方法也被重写,这是因为我们希望通过内部的 BoundColumn 来呈现 DataGrid 的项,而通过 AccessibleDataGridColumn 来呈现标头(和脚注)。然后,InitializeCell() 方法只需检查要初始化哪个类型的项,并将初始化职责委托给基类 (AccessibleDataGridColumn) 或内部的 BoundColumn

与本文相关的下载资料包括 AccessibleDataGridColumnAccessibleBoundColumn 的完整源代码以及 AccessibleButtonColumn 的源代码。我将其余 DataGrid 列类的创建工作(这些创建工作是复制最后三个内置 DataGrid 列的功能所需要的)留给读者,作为练习。

在 ASP.NET Web 页中使用可访问的 DataGrid 列类

本文的下载资料包括两个 Microsoft?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 文件夹中。)接下来,您需要在将要利用这些 DataGrid 列的 ASP.NET Web 页的顶部添加一条 @References 指令,如下所示:

<%@ Register TagPrefix="accessibility" Namespace="AccessibilityControls" Assembly="AccessibilityControls" %> 

最后,要使用这些列,请向 ASP.NET Web 页中添加一个 DataGrid,并将 AutoGenerateColumns 属性设置为 False。在 HTML 部分中,添加以下语法:

<asp:DataGrid runat="server" AutoGenerateColumns="False" ...> <Columns> <accessibility:AccessibleBoundColumn DataField="FieldName" ...> </accessibility:AccessibleBoundColumn> ... </Columns> </asp:DataGrid> 

这就是全部步骤!图 3 显示了使用 AccessibleBoundColumnAccessibleButtonColumnDataGrid 列类的 ASP.NET Web 页的 HTML 部分的屏幕快照。图 4 显示了同一页的设计视图的屏幕快照。


3. 使用 AccessibleBoundColumn


4. 设计器中的 AccessibleBoundColumn

请注意,在 Visual Studio .NET 设计器中,带有自定义的可访问列的 DataGrid 具有正常的外观。并且,如果您通过支持 JavaScript 的浏览器查看该页(如图 5 所示),则 DataGrid 将以正常方式呈现,并在列标头和 ButtonColumn 中呈现 LinkButton。然而,如果您通过不支持 JavaScript 的浏览器(如 Netscape 1.0)查看该页,则 ButtonColumn 和列标头将被呈现为 Button(参见图 6)。


5. 高级浏览器中的 AccessibleBoundColumn


6. 旧式浏览器中的 AccessibleBoundColumn

ASP.NET Whidbey 中的可访问性

在下一版本的 ASP.NET 中发行的 ASP.NET 服务器控件(代号为 Whidbey)在默认情况下将自动生成符合 Section 508 的标记。而且,这些服务器控件还将生成符合 WCAG 的标记。作为最终解决方案,Microsoft?Visual Studio?.NET 2005 将随附一个外接程序,以自动检查 HTML 标记是否符合 Section 508 和 WCAG。有关这些激动人心的附加功能的详细信息,请参阅 XHTML and Accessibility in ASP.NET Whidbey,这是 Microsoft 的 ASP.NET 工作组的共同创始人 Scott Guthrie 的一篇网络日记。

有关 Web 站点可访问性的详细信息,请参阅 Microsoft 的可访问性主页。还可以参阅 Section 508 页,其中包含有关各种 Microsoft 产品如何满足 Section 508 标准的资源。

源文:

http://www.microsoft.com/china/msdn/library/webservices/asp.net/MakinganASPNETWebSiteAccessible.mspx

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

cgmx

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值