У нас есть веб-приложение ASP.NET MVC 5. Мы регулярно тестируем доступность с помощью JAWS в сочетании с Internet Explorer 11 (предприятие) и Chrome. Мы продолжаем сталкиваться с проблемами, когда JAWS не считывает сообщения проверки, связанные с полями формы, когда пользователь вводит в поле TAB. Мы используем 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-модулей?