如何在ASP.NET MVC 3中自定义不显眼的验证以匹配我的风格?

Kor*_*ori 32 asp.net jquery jquery-validate asp.net-mvc-3

MVC 3中的默认验证基于jQuery验证,我通常可以使用以下内容进行自定义:

$.validator.setDefaults({
  submitHandler: function() { alert('submitHandler'); },
  errorPlacement: function(error, element) {
    // do something important here
    alert('errorPlacement');
  },
  errorClass: "error",
  errorElement: "input",
  onkeyup: false,
  onclick: false
})
Run Code Online (Sandbox Code Playgroud)

但是,这似乎在MVC 3中不起作用.具体来说,似乎并没有调用errorPlacement,我也不知道为什么.我将调用submitHandler,但绝不会调用errorPlacement.

如何自定义验证以匹配我的网站风格所需的任何结构/样式?默认值很高,但并不总是适用于所有情况.

Fel*_*sin 46

在我的代码中,而不是使用$.validator.setDefaults我访问表单验证器$("#form_selector").data('validator'),然后更改设置.

$(function () {

    var validator = $("#form_selector").data('validator');
    validator.settings.errorPlacement = function(error,element) {
        alert('errorPlacement');
    };

});
Run Code Online (Sandbox Code Playgroud)

看看它是否适合你.

  • 你在哪里叫$("#form_selector").data('validator')?? 当我这样做时,不会返回任何属性. (7认同)
  • 工作得很好,谢谢!拔出我的头发试图弄清楚为什么mvc3版本的验证不理解正常的jquery验证之类的自定义. (3认同)

CBa*_*arr 39

我有同样的问题,但后来发现不显眼的插件实际上casuing问题,那么它将覆盖你设置的任何选择!诀窍是按以下顺序编写/包含您的代码:

  1. 验证插件
  2. 您的自定义代码和选项
  3. 不引人注目的插件

任何其他订单,这将无法正确设置!

  • 我希望我可以大约20次投票. (6认同)
  • 谢谢.到目前为止最简单,最优雅的解决方案. (3认同)
  • http://aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/3583148-update-jquery-validate-unobtrusive-implementation- (3认同)
  • 为什么这不是公认的答案?!我已经在各种遗留项目中花了几个月和几个月的时间与之斗争,偶然遇到了这个问题.它现在非常有意义.谢谢. (3认同)

小智 6

正确的方法:

脚本顺序:

  1. 验证插件
  2. 不引人注目的插件
  3. 您的自定义代码和选项

自定义代码和选项脚本:

var settings = {
   //...
}; 

// override jQuery unobtrusive validator settings
$.validator.unobtrusive.options = settings;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!确实,这是正确的做法,当您需要**覆盖**这些设置:`errorClass`、`errorElement` 并想**扩展**这些功能:`errorPlacement`、`invalidHandler` 和`成功`。对于所有其他选项,您应该使用@ChrisBarr 提供的解决方案 (2认同)