我在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>
}
想知道为什么我会收到此警告以及我需要做些什么来解决这个问题。
答案 0 :(得分:29)
要防止Visual Studio错误地警告您"Element 'legend' occurs too few times"
需要更正Visual Studio的HTML和XHTML验证文件。
然后,VS会将<legend>
标记视为<fieldset>
标记内的可选标记(根据规范)。
为此,您需要修改两个文件:html_5.xsd
和xhtml_5.xsd
。对于VS2010,这些可以在(例如):
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\schemas\html\
采取的步骤:
关闭Visual Studio
使用文本编辑器打开上面文件夹中的文件html_5.xsd
。
找到以下行:
(注意有两行相似,第一行是正确的,第二行需要编辑):
<xsd:element name="legend" type="legendType" minOccurs="1" maxOccurs="1" />
将该行编辑为:
<xsd:element name="legend" type="legendType" minOccurs="0" maxOccurs="1" />
保存文件
对同一文件夹中的文件xhtml_5.xsd
重复此过程
现在启动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)
legend
都需要fieldset
。 legend
“represents 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 --------------
| ... |
--------------------------