HTML5元素'图例'出现次数太少

时间:2012-03-07 14:25:45

标签: asp.net-mvc html5 razor

我在MVC中有以下视图,我收到警告消息:Validation (HTML5): Element 'legend' occurs too few times

@model Berwin.Models.ViewModels.UserViewModel

@{
ViewBag.Title = "Press";
}

<h2>Press Area</h2>

@using (Html.BeginForm("Register", "PressController", FormMethod.Post))
{
<fieldset>
    @Html.TextBoxFor(model => model.FullName)
</fieldset>

<fieldset>
    @Html.TextBoxFor(model => model.Company)
</fieldset>

<fieldset>
    @Html.TextBoxFor(model => model.EmailAddress)
</fieldset>

<fieldset>
    @Html.CheckBoxFor(model => model.JoinMailingList)
</fieldset>
}

想知道为什么我会收到此警告以及我需要做些什么来解决这个问题。

6 个答案:

答案 0 :(得分:29)

要防止Visual Studio错误地警告您"Element 'legend' occurs too few times"需要更正Visual Studio的HTML和XHTML验证文件。

然后,VS会将<legend>标记视为<fieldset>标记内的可选标记(根据规范)。

为此,您需要修改两个文件:html_5.xsdxhtml_5.xsd。对于VS2010,这些可以在(例如):

中找到

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\schemas\html\

采取的步骤:

  1. 关闭Visual Studio

  2. 使用文本编辑器打开上面文件夹中的文件html_5.xsd

  3. 找到以下行:

    (注意有两行相似,第一行是正确的,第二行需要编辑)

      

    <xsd:element name="legend" type="legendType" minOccurs="1" maxOccurs="1" />

  4. 将该行编辑为:

      

    <xsd:element name="legend" type="legendType" minOccurs="0" maxOccurs="1" />

  5. 保存文件

  6. 对同一文件夹中的文件xhtml_5.xsd重复此过程

  7. 现在启动Visual Studio并查看HTML5文件 - 警告将消失。

    我希望能帮助其他人,我希望将来的更新中会纠正.xsd文件。

    <强>更新

    您需要找到的行可能是:

      

    <xsd:element ref="legend" minOccurs="1" maxOccurs="1" vs:firstchild="true"/>

    如果是,请将minOccurs="1"属性更改为minOccurs="0"

答案 1 :(得分:23)

根据HTML 5规范,<legend>标记不是<fieldset>中的必需元素。

  

图例元素表示其余内容的标题   图例元素的父字段集元素(如果有)。

文档:http://www.w3.org/TR/html5/forms.html#the-legend-element

在您的情况下,它只是Visual Studio或插件提供的警告。它不是必需的,可能有一种方法可以在工具 - 选项 - 文本编辑器 - HTML - 验证下抑制警告。在这里,您还可以切换验证目标(HTML 5,XHTML 1等)

答案 2 :(得分:11)

图例集中的图例是可选的。

但试试这个,摆脱警告:

    <fieldset>
        <legend>User</legend>
        @Html.TextBoxFor(model => model.FullName)
    </fieldset>

答案 3 :(得分:3)

问:你为什么收到这个警告?答:因为Visual Studio HTML 5验证程序错误地认为每个legend都需要fieldsetlegendrepresents a caption”用于fieldset中的其他表单元素和标签。它是可选

另外,fieldset用于将表单控件组合在一起。由于每个fieldset只包含一个表单元素,因此它们并不真正“分组”任何内容。为什么不取消所有这些?对于您向我们展示的简短形式,我认为将这些表单输入的一部分与其他表单分开是不同的。当您拥有单独的表单元素并且需要将它们组合在一起时,fieldset会更有意义。例如:

<fieldset>
    <legend>How many lumps of sugar would you like?</legend>
    <input type="radio" name="lumps" value="1" id="lumps1" />
    <label for="lumps1">One lump</label>
    <br />
    <input type="radio" name="lumps" value="2" id="lumps2" />
    <label for="lumps2">Two lumps</label>
    <br />
    <input type="radio" name="lumps" value="0" id="lumps0" />
    <label for="lumps0">No lumps for me, thanks</label>
</fieldset>
问:你需要做些什么来解决这个问题?答:我不认为需要修复。但是,如果您希望错误的验证器消息消失,请将legend元素添加为每个fieldset的第一个子元素。

答案 4 :(得分:1)

我处理它的方法就是隐藏传奇:

<fieldset>
<legend runat=server visible="false"></legend>
...
</fieldset>

答案 5 :(得分:-2)

你在哪里验证这个?图例元素是可选的:

http://dev.w3.org/html5/spec/Overview.html#the-fieldset-element

  

内容模型:可选择为图例元素,后跟流内容。

     

组的名称由第一个图例元素给出,该元素是fieldset元素的子元素(如果有)。

图例元素是字段集中字段的标题,用法如下

<fieldset>
  <legend>My Title></legend>
  ...
</fieldset>

哪个呈现像这样的盒子

-- My Title --------------
| ...                    |
--------------------------