2011-03-30 41 views
31

在MVC 3默认验证是基于jQuery Validation,我通常可以用类似定制:如何自定义在ASP.NET MVC 3不显眼的验证,以符合我的风格?

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

但是,这似乎并没有在MVC 3。具体工作,errorPlacement没有以前任何时候都被调用,我不知道为什么。我会得到submitHandler调用,但从来没有errorPlacement。

我如何自定义验证,以匹配任何结构/风格,我需要为我的网站的风格?默认很好,但并不总是适用于任何情况。

回答

44

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

$(function() { 

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

}); 

看看它是否适合你。

+3

工作很好,谢谢!想把我的头发拉出来试图弄清楚为什么mvc3版本的验证不理解定制,比如正常的jquery验证。 – akiro 2011-04-20 07:38:43

+0

这有效,除了我还需要设置像errorClass,errorElement等的东西。有什么建议吗? – Kori 2011-12-20 15:39:30

+7

你在哪里调用$(“#form_selector”)。data('validator')?当我这样做时,没有财产返回。 – nixon 2012-11-15 04:28:16

39

我有同样的问题,但意识到Unobtrusive插件实际上是转载的问题,它会覆盖您设置的任何选项!诀窍是让你写的代码/包含在以下顺序:

  1. 的验证插件
  2. 您的自定义代码&选项
  3. 不显眼的插件

任何其他命令,这将无法正确设置!

+3

谢谢。迄今为止最简单和最优雅的解决方案。 – Mark 2012-11-17 07:50:44

+3

http://aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/3583148-update-jquery-validate-unobtrusive-implementation- – 2013-01-23 23:59:28

+6

我希望我可以upvote约20倍。 – 2013-03-04 01:00:35

-3

我所做的这只是重复我的风格,以符合该不引人注目的验证补充的元素。

@Html.ValidationMessageFor(x => x.EmailAddress, "", new { @class = "field-error" }) 

当发生验证错误时,“ValidationMessageFor”会像下面一样添加类“字段验证错误”。

<span class="field-error field-validation-error" data-valmsg-for="EmailAddress" data-valmsg-replace="true"><span for="EmailAddress" generated="true" class="">Email address is Required.</span></span> 

所以我重复我的风格像

.field-error.***field-validation-error*** {position:relative;color:#fff;background:#589BC9;} 

我认为这是一个简单的方法来解决这个问题。

4

权的方式来做到这一点:

脚本命令:

  1. 的验证插件
  2. 不显眼的插件
  3. 您的自定义代码&选项

流失客户汤姆码&选项脚本:

var settings = { 
    //... 
}; 

// override jQuery unobtrusive validator settings 
$.validator.unobtrusive.options = settings; 
+0

谢谢!事实上,这是正确的方法,当你需要**覆盖**这些设置:'errorClass','errorElement'并且想**扩展**这些函数:'errorPlacement','invalidHandler'和' success'。对于所有其他选项,您应该使用@ChrisBarr提供的解决方案 – ctekse 2016-10-31 10:34:06

相关问题