Понимание метода $.validator.unobtrusive.adapters.addBool()

Я пытаюсь что-то понять.

Из этого blogpost http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

Модификация HTML и jQuery Validate: Адаптеры

Написание клиентского валидатора включает два этапа: запись validator для jQuery Validate и запись адаптера, который принимает значения параметров из атрибутов HTML и превращает их в jQuery Проверка метаданных. Первая тема не входит в сферу применения этого блога пост (поскольку его действительно не специфический MVC).

Существует коллекция адаптеров, доступная в jQuery.validator.unobtrusive.adapters. Подвешивание адаптера коллекция - это способ регистрации адаптера (add) и три помощника которые могут использоваться для регистрации очень распространенных типов адаптеров (addBool, addSingleVal и addMinMax).

Обратите внимание, что в нем указано два.

Но если вы посмотрите на это сообщение MVC3: установите флажок, требуемый с помощью проверки jQuery? вам нужен только второй шаг ( "запись адаптера" ) для проверка правильности работы - добавив эту строку кода:

$.validator.unobtrusive.adapters.addBool("mandatory", "required");

Я тестировал код в новом интернет-приложении MVC 4, и он отлично работает, вот суперпростая выборка.

Просмотр модели

public class SimpleViewModel
{
    [Mandatory(ErrorMessage = "You must agree to the Terms to register.")]
    [Display(Name = "Terms Accepted")]
    public bool IsTermsAccepted { get; set; }
}

Атрибут проверки

public class MandatoryAttribute : ValidationAttribute, IClientValidatable
{
    public override bool IsValid(object value)
    {
        return (!(value is bool) || (bool)value);
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        ModelClientValidationRule rule = new ModelClientValidationRule();
        rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
        rule.ValidationType = "mandatory";
        yield return rule;
    }
}

Вид

@model MvcApplication2.Models.SimpleViewModel

@{
    ViewBag.Title = "";
}    

@using (Html.BeginForm()) {
    @Html.ValidationSummary()
    @Html.CheckBoxFor(model => model.IsTermsAccepted)
    @Html.ValidationMessageFor(model => model.IsTermsAccepted)
    <input type="submit" value="Send" />
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript">
        $.validator.unobtrusive.adapters.addBool("mandatory", "required");
    </script>
}

Итак, у меня есть три вопроса:

  • - $.validator.unobtrusive.adapters.addBool( "обязательный", "обязательный" ); действительно, единственное, что вам нужно, помимо написания класса атрибутов?

  • что именно он делает за кулисами?

  • Где я могу найти хорошую документацию о addBool?

Ответы

Ответ 1

Помимо статьи @BlueChippy, связанной с комментариями, я нашел ответ на 2. в в этой статье.

  • да, что кроме атрибута нужно только одно. Это потому, что мы используем правило, которое уже существует (требуется).
  • Что он делает?

Это просто регистрирует новый адаптер проверки подлинности для MandatoryAttribute, где первым параметром является имя адаптера и Второй параметр - это имя правила проверки jQuery. Имя адаптера должен соответствовать указанному ранее значению в качестве типа проверки, и требуемое правило проверки jQuery потребует от пользователя проверки флажок.

3. Более подробную информацию можно найти в в этой статье о блоге Брэда Уилсона.