【问题标题】:Understanding the $.validator.unobtrusive.adapters.addBool() method了解 $.validator.unobtrusive.adapters.addBool() 方法
【发布时间】:2012-08-16 00:02:44
【问题描述】:

我试图理解一些事情。

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

桥接 HTML 和 jQuery 验证:适配器

编写客户端验证器包括两个步骤:编写 jQuery Validate 的验证器,并编写采用 来自 HTML 属性的参数值并将其转换为 jQuery 验证元数据。前一个话题不在本博客的讨论范围内 发布(因为它真的不是 MVC 特定的)。

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

请注意,上面写着 两个 步骤。

但是,如果您查看这篇帖子 MVC3: make checkbox required via jQuery validate?,您只需要第二步(“编写适配器”)即可进行验证 - 通过添加以下代码行:

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

我在一个新的 MVC 4 Internet 应用程序中测试了代码,它运行良好,这是超级简单的示例。

查看模型

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 的好文档?

【问题讨论】:

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 2016-07-06
    • 2014-07-20
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    相关资源
    最近更新 更多