jQuery验证器和使用AJAX与jQuery 1.10的自定义规则

时间:2016-01-06 17:07:23

标签: jquery ajax asp.net-mvc validation

如果使用jQuery 1.10或更高版本时,JQuery.validator如何与执行ajax请求的规则一起使用。 jQuery 1.10不再支持async = false选项。因此,jQuery.validator规则在success-callback中的ajax结果到达之前结束。

此旧帖子(当asyn = false未被弃用时)向我们建议该选项:jQuery validator and a custom rule that uses AJAX

我在asp.net MVC 5.2应用程序的上下文中使用jQuery.validator

1 个答案:

答案 0 :(得分:1)

解决方案是将MVC标准验证属性[Remote]与处理这些客户端验证请求的控制器结合使用。

解决方案完全基于此Microsoft article

快速总结:

  1. 使用[Remote]属性指定控制器并获取要调用的操作来注释ViewModel属性:

    [Required]
    [Display(Name = "E-Mail")]
    [EmailAddress]
    [System.Web.Mvc.Remote("EMail_Available", "Validation")]
    public string Email { get; set; }
    
  2. 创建一个禁用输出缓存的控制器:

    [OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
    public class ValidationController : Controller
    {
        public ValidationController() {}
    
       // GET: Validation
       [AllowAnonymous]
       public async Task<JsonResult> EMail_Available(string EMail) {
    
         var user = await UserManager.FindByEmail(EMail);
         if (user == null)
            return Json(true, JsonRequestBehavior.AllowGet);
    
         string suggestedUID = String.Format(CultureInfo.InvariantCulture,
            "Die E-Mail '{0}' wurde bereits registriert.", EMail);
    
         return Json(suggestedUID, JsonRequestBehavior.AllowGet);
       }
    }
    
  3. 在你的Razor视图中提供@ Html.ValidationMessageFor(...)

    <div class="form-group">
       @Html.LabelFor(m => m.Email, new { @class = "col-md-4 control-label" })
       <div class="col-md-8 input-group">
           <span class="input-group-addon colorLogin"><span class="glyphicon glyphicon-envelope" id="spaces"></span></span>
           @Html.TextBoxFor(m => m.Email, new { @id = "register_email", @class = "form-control", @placeholder = "E-Mail", @autofocus = "" })
           @Html.ValidationMessageFor(m => m.Email, "", new { @id = "register_email_error", @class = "text-danger" }, "div")
       </div>
    </div>