14

Ich versuche etwas zu verstehen.

Von diesem Blogpost http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

Bridging HTML und jQuery Validate: Adapter

eine clientseitige Validator Schreiben besteht aus zwei Schritten: die Validator für jQuery Validate Schreiben und den Adapter zu schreiben, die nimmt Der Parameter Werte von den HTML-Attributen und verwandelt es in jQuery Validieren Metadaten. Das vorherige Thema ist nicht im Rahmen dieses Blogs Post (da es wirklich nicht MVC spezifisch ist).

Es gibt eine Adapter-Sammlung unter jQuery.validator.unobtrusive.adapters. Hängen Sie den Adapter Sammlung ist die Adapter-Registrierungsmethode (hinzufügen) und drei Helfer , die verwendet werden können, um sehr häufige Arten von Adaptern (addBool, addSingleVal und addMinMax) registrieren.

Beachten Sie, dass es zwei Schritte heißt.

Aber wenn man einen Blick auf dieses Thema nehmen MVC3: make checkbox required via jQuery validate? Sie brauchen nur den zweiten Schritt („den Adapter zu schreiben“) für die Validierung zu arbeiten - durch diese Codezeile hinzu:

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

ich erprobt der Code in einer neuen MVC 4 Internet App und es funktioniert gut, hier ist die supersimple Probe.

Ansicht Modell

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

Validierungsattribut

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

Ansicht

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

Also im Grunde habe ich habe drei Fragen:

  1. ist $ .validator.unobtrusive.adapters.addBool ("obligatorisch", "erforderlich"); wirklich das einzige, was Sie neben dem Schreiben einer Attributklasse brauchen?

  2. was genau macht es hinter den Kulissen?

  3. Wo finde ich gute Dokumentation über addBool?

+1

1: Nur für "bereits existierende" Adapter. 2: Nicht sicher, in der Hoffnung, mich selbst zu finden. 3: Wenn Sie einen finden, lassen Sie mich bitte wissen! – BlueChippy

+1

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

Antwort

3

Neben dem Artikel @BlueChippy in den Kommentaren verknüpft, fand ich die Antwort auf 2. in this article.

  1. ja das ist das einzige, was neben dem Attribut benötigt wird. Das liegt daran, dass wir eine Regel verwenden, die bereits existiert (erforderlich).
  2. Was macht es?

Das registriert nur einen neuen Validierungs Adapter für den MandatoryAttribute, wo der erste Parameter ist der Adapter Name und der zweite Parameter ist der Name von jQuery Regel bestätigen. Der Adaptername sollte mit dem Wert übereinstimmen, den wir zuvor für den Validierungstyp angegeben haben, und die erforderliche jQuery-Validierung erfordert, dass der Benutzer das Kontrollkästchen aktiviert.

3. Weitere Informationen finden Sie unter this article on Brad Wilson's blog.