由于每个页面上都有表单标记,因此无法访问 Web 应用程序项目

Web Application Project not accessible due to form tag on every page

我有一个遗留的 Web 应用程序项目 (WAP),我需要确保它可以访问。这种类型的项目有一个母版页 (Site.Master),每个页面(称为 Web 窗体)都继承自该页面以保持一致的外观。

新的母版页如下所示:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="First5Edmx.Site" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <title></title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

您会看到正文包含一个表单标签,这意味着使用 Site.Master 作为模板的每个页面上都会有一个表单,无论它是否真的是一个表单。如果删除表单标签,项目将无法编译。

当我在我的网站上 运行 网络可访问性时,我在每个页面上都收到错误 "The page contains a form but there is no submit button"。这当然是正确的,但我如何使此代码可访问(无需使用更现代的技术重新创建整个项目)?

我不确定这是否仍会被编译器标记,或者引发错误的原因,但您可以使用 display:none 隐藏元素。这也会对辅助技术隐藏它,因此如果有工具将其标记为问题,隐藏它 可能 防止它被标记。

您也可以尝试 role="presentation",它基本上告诉辅助技术该元素仅用于视觉目的,不包含任何信息。这有点 hack,但值得一试。

<form style="display:none" id="form1" runat="server">
    <div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

        </asp:ContentPlaceHolder>
    </div>
    </form>

无论您是否可以让警告消失,请记住验证器和检查器只是为了提醒您注意潜在问题,但并非每条消息都不一定是真正的问题。 对于可访问性检查器尤其如此。他们在全球范围内做出了很好的假设,但有时无法区分错误和有点奇怪但出于某种原因需要的东西。

使用此类工具最重要的一点是,如果您收到无法修复的警告,t/don请准确了解其含义。 如果您可以接受其中的含义,那么您也可以接受警告。 要知道它到底意味着什么,最好的当然是进行手动测试。 无障碍工具永远无法取代手动测试

回到您的具体情况,该工具在技术上当然是正确的:表单必须有一个提交按钮。 然而实际上,如果表单既没有任何字段也没有任何按钮,则不可能发送任何内容。因此,如果有的话,对您和用户来说只会有很少的烦恼。

不过,您仍然可以在没有真实形式的页面中尝试两件事:

  • 按照其他答案中的建议将 role="presentation" 添加到 <form>,这样屏幕 readers 就不会在没有任何内容可填写时向用户宣布表单
  • 添加一个虚拟提交按钮,使用 display:none 禁用和隐藏,这样就没有人可以看到或单击它,如果您真的想让辅助功能检查器满意的话。请注意,它可能会给使用自定义或禁用 [​​=34=] 的用户带来麻烦。当然,当已经有一个真正的提交按钮时,不应该有任何额外的提交按钮。

想想第二项:你更喜欢什么?你的工具中的警告,或者一个小的 hacky 解决方案可能会给 1000000 个用户中的 1 个带来麻烦,如果你不小心留下了正常按钮和虚拟按钮,可能会出现一些错误的页面? 既然您知道可能的后果是什么,我个人认为不值得努力清除警告只是说您已经做到了,但请按照您的感受去做。

role=presentation 在不使用屏幕时没有副作用 reader,因此您完全可以放心使用它。