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 --------------
| ...                    |
--------------------------