mvc3 + jQuery 验证:如何捕获错误或正常事件

Posted

技术标签:

【中文标题】mvc3 + jQuery 验证:如何捕获错误或正常事件【英文标题】:mvc3 + jQuery validation: how to catch error or ok events 【发布时间】:2012-10-01 06:49:27 【问题描述】:

我正在使用 MVC3 C#,并且我有一个带有一些数据注释(验证规则)的模型

在我的 view.cshtml 文件中,我有一个包含一些复杂逻辑的表单,它使用现有元素上的绝对坐标绘制一些图形。

当用户提交带有不正确数据的表单时,jQuery 检查会使 @Html.ValidationMessageFor(...) 的某些字段可见 现在用户可以更正数据 - 并立即消除 @Html.ValidationMessageFor(...) 消息。

所以,这个显示/隐藏移动了其他页面元素,这个移动打破了我的绝对定位,我需要调用重绘函数( CorrectSizesAndPos(); )。

我怎样才能捕捉到这些讨厌的高光/非高光事件?

现在:

    我将 id 添加到我的表单中:

    @using (Html.BeginForm("Action1", "Controller1", FormMethod.Post, 
            new id="VMCreateForm"))
    

    我添加事件以检查提交时的数据:

    $("#VMCreateForm").submit(function () 
        if (true == $("#VMCreateForm").valid()) 
            $(":disabled").removeAttr('disabled'); //<-- I need this to transfer data to server from some disabled fields... 
        
        CorrectSizesAndPos();
        return true;
    );
    

    如果表单不好,我可以在提交前发现:

    $(document).ready(function () 
        $("#VMCreateForm").bind('invalid-form.validate',
            function (form, validator) 
                console.log('invalid-form.validate');
                CorrectSizesAndPos();
            
        );
     );
    

    我尝试在 $("#VMCreateForm").validate( .. ) 中添加一些事件,但它们没有被调用...

当不显眼的验证显示或隐藏验证消息时,我如何捕捉?

【问题讨论】:

【参考方案1】:

我做了几次测试,终于找到了适合我的案例的解决方案。可能它不是最佳的,但它是:

    $(document).ready(function () 
        var existingValdiation = $("#VMCreateForm").validate();
        var Original_errorPlacement = existingValdiation.settings.errorPlacement;
        var Original_success = existingValdiation.settings.success;
        existingValdiation.settings.errorPlacement = function (error, element) 
            Original_errorPlacement(error, element);
            CorrectSizesAndPos();
            //console.log('errorPlacement'); //for test
        ;
        existingValdiation.settings.success = function (label) 
            Original_success(label);
            CorrectSizesAndPos();
            //console.log('success'); //for test
        ;
    )

【讨论】:

以上是关于mvc3 + jQuery 验证:如何捕获错误或正常事件的主要内容,如果未能解决你的问题,请参考以下文章

使用 MVC3 Razor 在 Jquery 中应用图像扩展验证

未捕获的类型错误:无法使用 jQuery 验证读取未定义的属性“调用”

未捕获的 ReferenceError:未定义验证(jQuery 验证)

如何 jQuery Ajax 错误捕获和报告

如何捕获 jQuery AJAX 错误?

捕获 MVC 3.0 应用程序中抛出的所有错误的干净方法?