Validation 如何在$.ajax()中或之前强制表单客户端验证

Validation 如何在$.ajax()中或之前强制表单客户端验证,validation,asp.net-mvc-3,jquery,unobtrusive-validation,Validation,Asp.net Mvc 3,Jquery,Unobtrusive Validation,我有一个表单,并且启用了不引人注目的验证。默认情况下,将触发submit方法中的客户端验证,并且(如果您有任何错误)表单如下所示: var form = $( "#myform" ); form.validate(); if (form.valid()) { // ... } 甚至在将任何数据发送到服务器之前,也会进行验证 现在,如果要使用$.ajax方法,则此行为不起作用。客户端验证不起作用。您必须手动检查javascript中的所有字段,从而失去了DataAnnotation的所

我有一个表单,并且启用了不引人注目的验证。默认情况下,将触发submit方法中的客户端验证,并且(如果您有任何错误)表单如下所示:

var form = $( "#myform" );
form.validate();
if (form.valid()) {
    // ...
}

甚至在将任何数据发送到服务器之前,也会进行验证

现在,如果要使用$.ajax方法,则此行为不起作用。客户端验证不起作用。您必须手动检查javascript中的所有字段,从而失去了DataAnnotation的所有优点

有没有更好的解决办法?我本可以使用jquery的submit(),但我想它没有像$.ajax那样的回调

if (form.valid()) // do submit

我遇到了Yablargo遇到的同样问题,因为它说valid不是一个函数,所以我想到了这个:

对于submit按钮的onclick处理程序,我将其设置为:


onclick=“return$(this).closest('form').checkValidity();”

在检查表单是否有效之前,必须强制表单进行验证。大概是这样的:

var form = $( "#myform" );
form.validate();
if (form.valid()) {
    // ...
}
我确实

$("#form-submit-button").click(function (e) {
    e.preventDefault(); // Stops the form automatically submitting
    if ($("#my-form").valid()) {
        $("#my-form").submit();
    }
});

如果您使用带有插件的say TextBox将这些文本框变成日历控件,那么这似乎也是一个很好的解决方案。我说这句话的唯一原因是因为我将Zebra Datepicker与MVC表单一起使用,如果关注的焦点是日历日期选择器,它将提交一个无效的表单。使用下面的代码可以停止此操作。

由于某种原因,即使客户端验证工作正常,我的get.valid()也不是一个函数:( aghhh@Yablargo我也使用这种技术最终解决了这个问题,这是由于无意中加载了两个不同的jquery哦,是的……我经历了一个完全不同的问题,但您的
e.preventDefault();
为我指明了正确的方向……还有
$('#表单')。on('submit',function(e){code});