HTML5 Element 'legend' встречается слишком мало раз
У меня есть следующий вид в 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>
}
Хотелось бы узнать, почему я получаю это предупреждение и что мне нужно сделать, чтобы исправить это.
Ответы
Ответ 1
В соответствии с спецификацией HTML 5 тег <legend>
не является обязательным элементом внутри <fieldset>
.
Элемент legend представляет собой заголовок для остальной части содержимого элемента родительского элемента родительского элемента легенды, если он есть.
Документы: http://www.w3.org/TR/html5/forms.html#the-legend-element
В вашем случае это просто предупреждение, предоставленное Visual Studio или плагином. Его не требуется, и может быть способ подавить предупреждение в разделе "Инструменты" - "Параметры" - "Текстовый редактор" - "Проверка HTML". Здесь вы также можете переключить цель своей проверки (HTML 5, XHTML 1 и т.д.)
Ответ 2
Чтобы предотвратить ошибочное предупреждение 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 будут исправлены в будущем обновлении.
UPDATE:
Строка, которую вы должны найти, может быть:
<xsd:element ref="legend" minOccurs="1" maxOccurs="1" vs:firstchild="true"/>
Если это так, измените атрибут minOccurs="1"
на minOccurs="0"
Ответ 3
Легенда необязательна в полевом наборе.
Но попробуйте это, чтобы избавиться от предупреждения:
<fieldset>
<legend>User</legend>
@Html.TextBoxFor(model => model.FullName)
</fieldset>
Ответ 4
В: Почему вы получаете это предупреждение? A: Поскольку валидатор Visual Studio HTML 5 ошибочно полагает, что вам нужно legend
в каждом fieldset
. legend
" представляет заголовок" для других элементов и меток формы в fieldset
. Он необязательный.
В качестве альтернативы, a fieldset
используется для группировки элементов управления формы. Поскольку каждый из ваших fieldset
содержит только один элемент формы, они на самом деле не "группируют" что-либо. Почему бы не покончить со всеми из них? Для короткой формы, которую вы нам показали, я не вижу преимущества группировать часть этих входных данных формы отдельно от других. A 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>
В: Что вам нужно сделать, чтобы исправить это? A: Я не думаю, что он нуждается в исправлении вообще. Но если вы хотите, чтобы сообщение errant validator исчезло, добавьте элемент legend
в качестве первого ребенка к каждому fieldset
.
Ответ 5
То, как я справлялся с этим, было просто скрыть легенду:
<fieldset>
<legend runat=server visible="false"></legend>
...
</fieldset>
Ответ 6
Где вы проверяете это? Элемент легенды необязателен:
http://dev.w3.org/html5/spec/Overview.html#the-fieldset-element
Модель контента: необязательно элемент легенды, за которым следует поток.
Имя группы задается первым элементом легенды, который является дочерним элементом элемента fieldset, если таковой имеется.
Элемент legend - это заголовок для полей в наборе полей и используется следующим образом
<fieldset>
<legend>My Title></legend>
...
</fieldset>
Что делает поле вроде этого
-- My Title --------------
| ... |
--------------------------