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

我有一个遗留的 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 作为模板的每个页面都会有一个表单,无论它实际上是否是表单。如果删除表单标签,项目将无法编译。

当我在网站上运行 Web 可访问性时,每个页面上都会收到错误“该页面包含表单,但没有提交按钮”。当然,这是正确的,但是如何使该代码易于访问(无需使用更现代的技术重新创建整个项目)?


繁华开满天机
浏览 113回答 2
2回答

饮歌长啸

无论您是否可以使警告消失,请记住验证器和检查器的作用只是为了引起您对潜在问题的注意,但并非每条消息都不一定是真正的问题。对于可访问性检查器尤其如此。他们在全球范围内做出了良好的假设,但有时无法区分错误和有点奇怪但出于某种原因需要的东西。使用此类工具最重要的是,如果您收到无法/不想修复的警告,请准确了解其含义。如果您可以接受其中的含义,那么您也可以接受警告。要确切地知道它意味着什么,最好的当然是进行手动测试。可访问性工具永远无法取代手动测试。回到您的具体情况,当然该工具在技术上是正确的:表单必须有一个提交按钮。但实际上,如果表单既没有任何字段也没有任何按钮,则无法发送任何内容。因此,对于您和用户(如果有的话)来说,只会产生很少的烦恼。不过,您仍然可以在没有实际形式的页面中尝试两件事:按照其他答案中的建议将 添加role="presentation"到 the 中<form>,以便屏幕阅读器在没有任何内容可填写时不会向用户宣布表单display:none如果您真的想让可访问性检查器满意,请添加一个虚拟提交按钮,禁用并隐藏,以便没有人可以看到或单击它。请注意,这可能会给使用自定义或禁用 CSS 的用户带来麻烦。当然,当已经有一个真正的提交按钮时,就不应该有任何额外的提交按钮。思考第二项:你更喜欢什么?工具中的警告,或者一个可能会给 1000000 名用户中的 1 名用户带来麻烦的小黑客解决方案,如果您错误地留下了正常按钮和虚拟按钮,可能还会出现一些有问题的页面?既然您知道可能会产生什么后果,我个人认为,仅仅为了说您已经做到了而清除警告是不值得的,而是按照您的感觉去做。不使用屏幕阅读器时,role=presentation 没有副作用,因此您对此完全安全。

慕尼黑的夜晚无繁华

我不确定这是否仍会被编译器标记,或者任何引发错误的原因,但您可以使用 display:none 隐藏元素。这也会将其隐藏在辅助技术之外,因此,如果有工具将其标记为问题,则隐藏它可能会阻止其被标记。您还可以尝试 role="presentation" ,它基本上告诉辅助技术该元素仅用于视觉目的且不包含任何信息。这有点麻烦,但值得一试。<form style="display:none" id="form1" runat="server">&nbsp; &nbsp; <div>&nbsp; &nbsp; &nbsp; &nbsp; <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">&nbsp; &nbsp; &nbsp; &nbsp; </asp:ContentPlaceHolder>&nbsp; &nbsp; </div>&nbsp; &nbsp; </form>
打开App,查看更多内容
随时随地看视频慕课网APP