【发布时间】: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>
}
所以基本上我有三个问题:
是 $.validator.unobtrusive.adapters.addBool("mandatory", "required");除了写一个属性类之外,你真的唯一需要的东西吗?
它在幕后究竟做了什么?
我在哪里可以找到关于 addBool 的好文档?
【问题讨论】:
-
1:仅适用于“已经存在”的适配器。 2:不确定,希望自己了解一下。 3:如果你找到了,请告诉我!
标签: jquery jquery-validate asp.net-mvc-4 custom-attributes unobtrusive-validation