MVC3发布不引人注目的客户端验证但在提交挂钩之前可用吗?

时间:2011-06-13 02:44:42

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

使用jquery.validate1.8.1)库和ASP MVC3 RTM jquery.validate.ubobtrusive库,我想知道是否有可用的钩子可以注入一些额外的逻辑来发布帖子 - 验证,但在提交实际表单之前。

换句话说:表单正在提交,验证运行(正常执行任何操作),验证没有理由阻止表单提交,在此运行我的代码,然后提交为正常。

我知道我可以处理表单的submit事件,并执行以下操作:

$('#MyForm').submit(function() {
    if (!$(this).valid())
       return false;

    // My Code Here
}

...自己调用验证然后,如果成功,则放入我自己的逻辑。但我觉得这很脏。我怎么知道这是jquery.validate的提交处理程序中唯一的代码?即使这是唯一运行的代码,我真的想复制它吗?我宁愿不必反映验证库提交的内容;我想在验证发生后注入自己,但是在表单提交之前 - 就像绑定到神秘的$('#MyForm').lastPossibleMomentBeforeSubmit(function() { // My Code Here });一样 事件

关于“我的代码在这里”应该去哪里的任何指示?

2 个答案:

答案 0 :(得分:1)

如果你刚刚使用jquery.validate,你可以像这样使用成功回调:

$(function () {
    $('#MyForm').validate({
       success : function(error) {
           // additional logic
       }
    });
});

但是,因为你正在使用jquery.validate.ubobtrusive,所以这不能直接完成,因为jquery.validate.ubobtrusive在内部隐藏了对你的.validate调用。

相反,您需要获取jquery.validate.ubobtrusive传递给.validate的设置/选项对象,捕获它的现有成功处理程序,并将其替换为您自己的调用原始处理程序并具有此类附加功能:

$(function () {
            var settings = $('form').data('validator').settings,
                originalSuccess = settings.success;
            settings.success = function (error) {
                originalSuccess(error);
                // additional logic
            };
        });

答案 1 :(得分:-1)

我相信你可以做这样的事情。

$(document).ready(function() {
    $("#MyFormform").validator().bind("onSuccess", function(e, els) {
         //Code to run after validation succeeds
    }
});