了解$ .validator.unobtrusive.adapters.addBool()方法

问题描述:

我试图理解一些东西。

从这个博客帖子http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

桥接HTML和jQuery验证:适配器

编写客户端验证包括两个步骤:编写 验证了jQuery验证,写这需要适配器来自HTML属性的 参数值并将其转换为jQuery 验证元数据。前一个主题不在此博客的范围 后(因为它真的不是MVC特定的)。

有一个适配器集合可在 jQuery.validator.unobtrusive.adapters。挂接适配器 集合是适配器注册方法(add)和三个助手 ,可用于注册非常常见的适配器类型(addBool, addSingleVal和addMinMax)。

请注意,它说两个步骤。

但如果你看看这个帖子MVC3: make checkbox required via jQuery validate?,你只需要在第二个步骤(“写适配器”)的验证工作 - 通过加入这一行的代码:

$.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> 
} 

所以基本上我有三个问题:

  1. 是$ .validator.unobtrusive.adapters.addBool(“mandatory”,“required”);除了写一个属性类之外,你真的是唯一需要的东西吗?

  2. 它究竟在幕后做了什么?

  3. 在哪里可以找到有关addBool的良好文档?

+1

1:仅适用于“已有的”适配器。 2:不确定,希望找出自己。 3:如果你找到一个,请告诉我! – BlueChippy 2013-01-09 04:45:15

+1

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

除了文章@BlueChippy链接到评论,我找到了答案2在this article

  1. 是的这是除属性以外唯一需要的东西。这是因为我们使用已存在的规则(要求)。
  2. 它是做什么的?

这只是注册了必要的属性, 其中第一个参数是适配器名称和 第二个参数是jQuery的的名称验证规则新的验证适配器。适配器名称 应该匹配我们前面指定的值作为验证类型 ,并且jQuery验证必需规则将要求用户检查 复选框。

3。更多信息可在this article on Brad Wilson's blog中找到。