14

Próbuję coś zrozumieć.

Od tego blogpost http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

Bridging HTML i jQuery sprawdzania poprawności: Adaptery

Pisanie Walidator po stronie klienta składa się z dwóch etapów: piszących walidator dla jQuery Weryfikuj i pisanie adapter, który trwa wartości parametrów z atrybutów HTML i zamienia je na jQuery Sprawdź poprawność metadanych. Poprzedni temat nie jest w zakresie tego bloga post (ponieważ tak naprawdę nie jest to specyficzne dla MVC).

Dostępna jest kolekcja adapterów pod adresem jQuery.validator.unobtrusive.adapters. Zawieszanie kolekcji adaptera to metoda rejestracji adaptera (dodaj) i trzech pomocników , które mogą być używane do rejestrowania bardzo popularnych typów adapterów (addBool, addSingleVal i addMinMax).

Zauważ, że podano dwa kroki.

Ale jeśli spojrzeć na to stanowisko MVC3: make checkbox required via jQuery validate? trzeba tylko drugi etap („pisanie adapter”) do zatwierdzenia do pracy - przez dodanie tego wiersza kodu:

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

I przetestowane kod w nowej aplikacji internetowej MVC 4 i działa dobrze, oto przykład superprostości.

Widok Model

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

Validation Atrybut

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; 
    } 
} 

Zobacz

@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> 
} 

Więc w zasadzie mam trzy pytania:

  1. jest $ .validator.unobtrusive.adapters.addBool ("obowiązkowy", "wymagany"); naprawdę jedyne czego potrzebujesz oprócz pisania klasy atrybutów?

  2. co dokładnie robi za kulisami?

  3. gdzie mogę znaleźć dobrą dokumentację na temat addBool?

+1

1: Tylko dla "już istniejących" adapterów. 2: Nie jestem pewien, mając nadzieję, że sam się o tym dowiem. 3: Jeśli znajdziesz, daj mi znać! – BlueChippy

+1

http://thewayofcode.wordpress.com/2012/01/18/custom-unobtrusive-jquery-validation-with-data-annotations-in-mvc-3/ – BlueChippy

Odpowiedz

3

Poza @BlueChippy artykułu związanego w komentarzach, znalazłem odpowiedź na 2. w this article.

  1. tak, to jedyna rzecz, której potrzeba oprócz atrybutu. Dzieje się tak, ponieważ używamy reguły, która już istnieje (wymagana).
  2. Co robi?

To właśnie rejestruje nowy adapter walidacji dla MandatoryAttribute, gdzie pierwszy parametr jest nazwą adapter a drugi parametr jest nazwą jQuery potwierdzić regułę. Nazwa adaptera powinna być zgodna z wartością określoną wcześniej jako typ sprawdzania poprawności, , a wymagana reguła sprawdzania poprawności jQuery będzie wymagać od użytkownika zaznaczenia pola wyboru .

3. Więcej informacji można znaleźć w this article on Brad Wilson's blog.