我们有一个 ASP.NET MVC 5 Web 应用程序。我们结合 Internet Explorer 11(企业授权)和 Chrome 使用 JAWS 进行定期可访问性测试。当用户 TAB 进入字段时,我们一直遇到 JAWS 无法读取与表单字段关联的验证消息的问题。我们使用 FluentValidation 和标准 HTML 助手来显示表单字段和验证消息(示例如下):
@Html.LabelFor(model => model.Email)
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email, null, new { role = "alert" })
示例 FluentValidation 可能会在数据库中查询表单中的电子邮件地址,并显示在服务器端运行的“此电子邮件已被占用”的消息。
发送回浏览器的结果 HTML 是:
<label for="Email">E-mail address:</label>
<input type="text" name="Email" id="Email" ...>
<span class="..." data-valmsg-for="Email" data-valmsg-replace="true" role="alert">
This e-mail has already been taken
</span>
没有将验证消息与表单字段相关联。我一直认为 MVC 框架会自动建立这种连接,但显然它没有。
根据WebAIM的说法,我们应该利用该aria-describedby
属性将表单字段与内联验证错误相关联,但要重新检测现有的 MVC5 框架来做到这一点是一项艰巨的任务。
当将焦点放在由 ASP.NET MVC5 生成的表单字段时,我们如何在不重写主要 HTML 帮助程序的情况下让屏幕阅读器宣布内联验证消息?