17

我在ASP.net MVC 3以下几种观点:ASP.net MVC验证挂钩

​​

我使用与jQuery和流利的验证框架不显眼的JavaScript。

当我点击保存按钮并验证失败时,是否有一些事件可以调用某些自定义JavaScript?

function validationFailed() { 
    // do something here only if validation failed 
} 

我怎么会扎入验证,这样,当它失败(且仅当它失败)我可以打电话给我validationFailed()函数。

+0

你究竟想要做什么?我知道你想运行一些JavaScript,如果它失败了,但是通过这样做试图达到什么目的? –

回答

3

你可以使用invalidHandler,我相信是在jquery验证。

invalidHandler回调
回调的自定义代码,当一个无效的表单提交。调用 ,事件对象作为第一个参数,验证器作为 秒。

+0

如果我使用数据注释或流利验证,这是否会影响我在我的视图中创建验证处理程序? – Dismissile

+0

这只是当提交的表单无效时触发的回调。所有通过数据注释创建的验证等都将正常工作。 –

+0

这不起作用。当我将validate()添加到我的表单时,它会被忽略。我认为数据注释创建的验证处理程序与我尝试手动添加的处理程序之间存在冲突。 – Dismissile

35

在jQuery /验证文档说,你可以使用invalidHandler当一个无效的形式提交给反应。

但是,由于MVC不显眼的验证实例化验证本身,因此您必须稍后挂接此事件。

使用与jQuery/Validation完全相同的机制:您可以将您的代码绑定到表单元素自定义事件'invalid-form.validate',女巫对应于invalidHandler!

$(document).ready(function() { 
    $('#myform').bind('invalid-form.validate',function(){ 
     alert('invalid form!'); 
    }); 
}); 

给您形式的ID使用:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myform" })) { 
} 

更新:

的另一种方式获得现有的验证对象调用的validate()在窗体上。如果这种形式验证程序已经创建,它会被退回:

编辑:初始化后发生,改变.settings.invalidHandler是为时已晚绑定。因此,除非您重新启动验证程序,否则以下代码段将不再有效。

$(document).ready(function() { 
    var existingValdiation = $("#myform").validate(); 
    //the settings property corresponds to the options parameter 
    existingValdiation.settings.invalidHandler = function (form) { 
     alert('invalid form!'); 
    }; 
    // not recommended: 
    // re-init would bind settings.invalidHandler to 'invalid-form.validate' 
    // existingValdiation.init(); 
}); 
+0

第一个选项工作得很好:) :) –

+0

谢谢。第一个选项对我来说非常完美。 = - ) –

+0

第一个选项工作。其次没有。应该编辑替代还是删除它?感谢第一个。 –