Элемент HTML5 «легенда» встречается слишком мало раз - PullRequest
15 голосов
/ 07 марта 2012

У меня есть следующий вид в 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 ]

29 голосов
/ 16 октября 2012

Во избежание неправильного предупреждения Visual Studio о том, что "Element 'legend' occurs too few times" необходимо исправить файлы проверки HTML и XHTML в Visual Studio.

VS будет обрабатывать тег <legend> как необязательный внутри тега <fieldset>(согласно спецификации).

Для этого необходимо отредактировать два файла: html_5.xsd и xhtml_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, который находится в той же папке

Теперь запустите Visual Studio и просмотрите файл HTML5 - предупреждение исчезнет.

Надеюсь, это поможетдругие, и я надеюсь, что файлы .xsd будут исправлены в будущем обновлении.

ОБНОВЛЕНИЕ:

Строка, которую вам нужно найти, может быть:

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

Если это так, измените атрибут minOccurs="1" на minOccurs="0"

23 голосов
/ 07 марта 2012

Согласно спецификации HTML 5, тег <legend> не является обязательным элементом в пределах <fieldset>.

Элемент legend представляет заголовок для остального содержимого элемента легенды.родительский элемент fieldset, если есть.

Документы: http://www.w3.org/TR/html5/forms.html#the-legend-element

В вашем случае это просто предупреждение, предоставленное Visual Studio или плагином.Это не требуется, и может быть способ подавить предупреждение в разделе Инструменты - Параметры - Текстовый редактор - HTML - Проверка.Здесь вы также можете переключить цель проверки (HTML 5, XHTML 1 и т. Д.)

11 голосов
/ 07 марта 2012

Легенда необязательна в Fieldset.

Но попробуйте это, чтобы избавиться от предупреждения:

    <fieldset>
        <legend>User</legend>
        @Html.TextBoxFor(model => model.FullName)
    </fieldset>
3 голосов
/ 07 марта 2012

В: Почему вы получаете это предупреждение?A: Поскольку средство проверки подлинности Visual Studio HTML 5 ошибочно полагает, что вам нужно legend в каждом fieldset.legend " представляет заголовок " для других элементов формы и меток в 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>

В: Что нужно сделать, чтобы это исправить?A: Я не думаю, что это нуждается в исправлении вообще.Но если вы хотите, чтобы ошибочное сообщение валидатора исчезло, добавьте элемент legend в качестве первого дочернего элемента к каждому fieldset.

1 голос
/ 29 мая 2013

То, как я справился с этим, было просто скрыть легенду:

<fieldset>
<legend runat=server visible="false"></legend>
...
</fieldset>
0 голосов
/ 07 марта 2012

Где вы это проверяете? Элемент легенды является необязательным:

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

Модель содержимого: необязательно элемент легенды, за которым следует содержимое потока.

Имя группы задается первым элементом легенды, который является дочерним элементом элемента fieldset, если таковой имеется.

Элемент легенды является заголовком для полей в наборе полей и используется следующим образом

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

Который отображает поле, подобное этому

-- My Title --------------
| ...                    |
--------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...