14

Estoy tratando de entender algo.

De esta entrada de blog http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

Bridging HTML y jQuery Validar: Adaptadores

Escribiendo un validador del lado del cliente implica dos pasos: escribir el validador para jQuery Validar, y escribir el adaptador que lleva los valores del parámetro de los atributos HTML y lo convierte en jQuery Validar metadatos. El tema anterior no está en el alcance de este blog publicación (ya que realmente no es MVC específico).

Hay una colección de adaptadores disponible en jQuery.validator.unobtrusive.adapters. Colgando del adaptador , la colección es el método de registro del adaptador (agregar) y tres auxiliares que se pueden usar para registrar tipos de adaptadores muy comunes (addBool, addSingleVal y addMinMax).

Observe que dice dos pasos.

Pero si se echa un vistazo a este post MVC3: make checkbox required via jQuery validate? sólo necesita el segundo paso ("escribir el adaptador") para la validación de trabajar - mediante la adición de esta línea de código:

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

Probé a cabo el código en una nueva aplicación de Internet MVC 4 y funciona bien, aquí está la muestra superrápida.

Ver Modelo

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

validación de atributos

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

Ver

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

Así que, básicamente Tengo tres preguntas:

  1. es $ .validator.unobtrusive.adapters.addBool ("obligatorio", "obligatorio"); ¿realmente lo único que necesitas además de escribir una clase de atributo?

  2. ¿Qué hace exactamente detrás de escena?

  3. ¿Dónde puedo encontrar buena documentación acerca de addBool?

+1

1: Solo para adaptadores "ya existentes". 2: No estoy seguro, esperando descubrirlo. 3: ¡Si encuentra uno, hágamelo saber! – BlueChippy

+1

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

Respuesta

3

Además de la @BlueChippy artículo enlazado en los comentarios, he encontrado la respuesta a 2. En this article.

  1. sí, eso es lo único que se necesita además del atributo. Esto se debe a que utilizamos una regla que ya existe (requiere).
  2. ¿Qué hace?

Esto sólo registra un nuevo adaptador de validación para el MandatoryAttribute, en el que el primer parámetro es el nombre del adaptador y el segundo parámetro es el nombre de jQuery validar regla. El nombre del adaptador debe coincidir con el valor que especificamos anteriormente, ya que el tipo de validación, y la regla requerida jQuery validation requerirán que el usuario marque en la casilla de verificación.

3. Se puede encontrar más información en this article on Brad Wilson's blog.