Понимание Html-Кода, Созданного Путем Ненавязчивой Проверки В Asp.net Mvc

Это вторая часть серии «Понимание ненавязчивой проверки в ASP.Net MVC».

1. Работа с плагином проверки jQuery изнутри 2. Понимание HTML-кода, созданного путем ненавязчивой проверки в ASP.Net MVC. 3. Внутренняя работа ненавязчивого плагина проверки jQuery в ASP.Net MVC. О чем мы поговорим в этой статье:

  • Идея ненавязчивого JavaScript
  • Разница между обычной и ненавязчивой проверкой
  • Понимание ненавязчивой проверки:
    • Ээлементы ввода, правила их проверки и как они работают
    • Сообщения проверки и как они работают при ненавязчивой проверке.



Основная идея ненавязчивого JavaScript

Microsoft представила первый модуль проверки в первой версии MVC. Модуль улучшался с каждой версией и стал выполнять ненавязчивую проверку в ASP.Net MVC 3. Короче говоря, даже в современном JavaScript, который мы пишем в основном в отдельном js-файле, нам иногда нужны данные, связанные с Html, и поэтому записываем метаданные объектов JavaScript внутри Html-страницы.

Вызываем функцию из js-файла, в которую передаем метаданные объекта на странице.

Одна из целей ненавязчивого JavaScript — отделить JavaScript от разметки HTML. Вы можете прочитать об этом больше здесь (автор отсылает нас к статье о ненавязчивом JavaScript в англоязычной Википедии, прим.

переводчика)

Разница между обычной и ненавязчивой проверкой.

Ниже приведен код модели и HTML-разметка, созданные с использованием проверки MVC 2 и ненавязчивой проверки MVC 3. Наша модель С#
  
  
  
  
   

public class ValidationModel { [Required] public string FirstName { get; set; } [Required, StringLength(60)] public string LastName { get; set; } [Range(1, 130)] public int Age { get; set; } }

Презентация в MVC 2 с использованием помощников html HTML

<label for="FirstName">FirstName</label> <input id="FirstName" class="text-box single-line" type="text" name="FirstName" value="" /> <span id="FirstName_validationMessage" class="field-validation-valid"></span> <label for="LastName">LastName</label> <input id="LastName" class="text-box single-line" type="text" name="LastName" value="" /> <span id="LastName_validationMessage" class="field-validation-valid"></span> <label for="Age">Age</label> <input id="Age" class="text-box single-line" type="text" name="Age" value="" /> <span id="Age_validationMessage" class="field-validation-valid"></span> <script type="text/javascript">// <![CDATA[ if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; } window.mvcClientValidationMetadata.push({"Fields":[{"FieldName":"FirstName","ReplaceValidationMessageContents":true,"ValidationMessageId":"FirstName_validationMessage","ValidationRules":[{"ErrorMessage":"The FirstName field is required.","ValidationParameters":{},"ValidationType":"required"}]},{"FieldName":"LastName","ReplaceValidationMessageContents":true,"ValidationMessageId":"LastName_validationMessage","ValidationRules":[{"ErrorMessage":"The LastName field is required.","ValidationParameters":{},"ValidationType":"required"},{"ErrorMessage":"The field LastName must be a string with a maximum length of 60.","ValidationParameters":{"max":60},"ValidationType":"length"}]},{"FieldName":"Age","ReplaceValidationMessageContents":true,"ValidationMessageId":"Age_validationMessage","ValidationRules":[{"ErrorMessage":"The field Age must be between 1 and 130.","ValidationParameters":{"min":1,"max":130},"ValidationType":"range"},{"ErrorMessage":"The Age field is required.","ValidationParameters":{},"ValidationType":"required"},{"ErrorMessage":"The field Age must be a number.","ValidationParameters":{},"ValidationType":"number"}]}],"FormId":"form0","ReplaceValidationSummary":true,"ValidationSummaryId":"validationSummary"}); // ]]></script>

Презентация в MVC 3 с использованием html-хелперов и ненавязчивой проверки.

HTML

<label for="FirstName">FirstName</label> <input id="FirstName" class="text-box single-line" type="text" name="FirstName" value="" data-val="true" data-val-required="The FirstName field is required." /> <label for="LastName">LastName</label> <input id="LastName" class="text-box single-line" type="text" name="LastName" value="" data-val="true" data-val-length="The field LastName must be a string with a maximum length of 60." data-val-length-max="60" data-val-required="The LastName field is required." /> <label for="Age">Age</label> <input id="Age" class="text-box single-line" type="text" name="Age" value="" data-val="true" data-val-number="The field Age must be a number." data-val-range="The field Age must be between 1 and 130." data-val-range-max="130" data-val-range-min="1" data-val-required="The Age field is required." />

Этот код взят из статьи Брэд Уилсон «Ненавязчивая проверка клиента в ASP.NET MVC 3».

Как мы видим, элементы «входа» HTML понятия не имеют, какие правила проверки к ним применяются.

Существует только один большой объект JavaScript, содержащий информацию о проверке, примененной к каждому элементу страницы.

С другой стороны, если мы посмотрим на «входные» элементы, сгенерированные MVC 3, мы увидим, что они содержат больше метаданных.

Вся информация, необходимая для проверки, содержится в атрибутах «data-*».

Устраняет необходимость в огромном объекте JavaScript.

Понимание ненавязчивой проверки



1. «входные» элементы, правила их проверки и как они работают
Итак, давайте выясним, что происходит с атрибутами «data-*».

MVC создает атрибуты «data-*» на основе правил проверки.

jquery.validate.unobtrusive считывает правила и преобразует их в путь.

Как только ненавязчивая проверка преобразует эти правила, она вызывает метод «validate()» и передает массив правил с их настройками для их проверки.

Любое ненавязчивое правило любого элемента Html состоит из трех частей:

  • data-val="true" — это просто флаг, указывающий, что к элементу прикреплена ненавязчивая проверка.

  • data-val-rulename="message" - делает две вещи.

    Часть «data-val-rulename» указывает имя правила, а «message» содержит текст сообщения проверки.

  • data-val-rulename-additionalvalues="value" для добавления дополнительных значений, необходимых правилу проверки для завершения проверки.

    (Например, проверка диапазона значений «диапазона», когда значение должно быть меньше некоторого значения и больше другого)

Давайте подробнее рассмотрим сгенерированный элемент «input» и объясним атрибуты «data-*».



<input id="Name" class="ignore" type="text" name="Name" value="" data-val="true" data-val-required="*" data-val-atleastonerequired="Enter at least Name, Email or Lastname" data-val-atleastonerequired-attributes="Email,LName" />

К элементу применяются два правила.

Один из них — это встроенный атрибут «required», а другой — настраиваемый атрибут под названием «atleastonerequired».

Когда пользователь не вводит никаких данных и нажимает «Отправить форму», в качестве сообщения проверки появляется «*», указывающее, что элемент является обязательным.

Если пользователь нарушает правило atleastonerequired, появится сообщение о проверке.



2. Сообщения валидации и как они работают при ненавязчивой валидации.

Начнем с примера

<!-- Required input using unobtrusive validation --> <input id="FirstName" class="text-box single-line" type="text" name="FirstName" value="" data-val="true" data-val-required="The FirstName field is required." /> <!-- The input's validation message placeholder --> <span data-valmsg-replace="true" data-valmsg-for="Name" class="field-validation-valid help-inline" />

Как мы видим, в контейнере для сообщения об ошибке есть два элемента data-*.

  • «data-valmsg-for» — это значение атрибута «name» элемента «input», которому принадлежит контейнер.

    И элемент «input», и контейнер должны находиться в одном теге формы.

  • По умолчанию для параметра «data-valmsg-replace» установлено значение true. Разница между значениями true и false следующая: если установлено значение true, то сообщение об ошибке в контейнере будет меняться в зависимости от того, какое правило проверки было нарушено, если false, то оно будет постоянным и содержимое не изменится.

    , только класс с «действительным» на «недействительный».

Если одно из правил валидации нарушено, значение атрибута «class» будет содержать «field-validation-error», а если нет, то «field-validation-valid».

Перевод статьи Надима Хедра «Понимание HTML, созданного в результате ненавязчивой проверки в Asp.net MVC» обновление 01.06.13: добавлены ссылки на другие посты серии Теги: #перевод #плагины jquery #asp.net mvc #JavaScript #.

NET #ASP #ASP

Вместе с данным постом часто просматривают: