使用不显眼的验证适用于单个元素,但不适用于整个表单

时间:2011-10-08 05:04:52

标签: asp.net-mvc-3 unobtrusive-javascript jquery-validate

使用Asp.Net MVC3进行不显眼的验证。我有一个有几个输入字段的表单。其中一个领域非常简单:

<input id="Name" class="valid" type="text" value="" name="Name" data-val-required="Enter your name." data-val-length-min="5" data-val-length-max="50" data-val-length="Enter a valid name." data-val="true">

然后我有一些js验证表单并仅在客户端验证通过时提交它:

var $form = $('#contact_form');
var formAction = $form.attr('action');
var serialized = $form.serialize();

if ($form.validate().valid()) {...

现在最后一行总是返回true(是的,我启用了不显眼的)。但是,如果我将最后一行更改为:

if ($form.validate().element('#Name')) { ...

效果很好并且返回false。我有很多字段,并且不想迭代每个字段,并且很困惑为什么在验证整个表单时它说的是true但是验证每个单独的元素都正确地返回false。

我尝试过的事情: - 通过unobtrusive的$ .validator.parse重新解析表单(...无效。它不是动态表单,并在页面加载时呈现。

注意:我还检查了jquery(v1.6.2)jquery.validate.min.js(v1.8.1)和jquery.validate.unobtrusive.min.js是否已在浏览器中加载。

1 个答案:

答案 0 :(得分:0)

您无需致电.validate(),而是直接.valid()

if ($form.valid()) {
    ...
}