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

时间:2012-08-16 00:02:44

标签: jquery jquery-validate asp.net-mvc-4 custom-attributes unobtrusive-validation

我想了解一些事情。

来自此博文http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

  

桥接HTML和jQuery验证:适配器

     

编写客户端验证器涉及两个步骤:编写   验证器用于jQuery验证,并编写适配器   来自HTML属性的参数值并将其转换为jQuery   验证元数据。前一个主题不在本博客的范围内   post(因为它确实不是MVC特定的)。

     

可以使用适配器集合   jQuery.validator.unobtrusive.adapters。挂掉适配器   collection是适配器注册方法(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 个答案:

答案 0 :(得分:3)

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

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

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

    3。有关详细信息,请参阅this article on Brad Wilson's blog