0

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

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

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

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

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

目前:

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

    @using (Html.BeginForm("Action1", "Controller1", FormMethod.Post, 
            new {id="VMCreateForm"}))
    
  2. 我添加事件来检查提交数据:

    $("#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;
    });
    
  3. 如果表单不好,我可以在提交之前发现:

    $(document).ready(function () {
        $("#VMCreateForm").bind('invalid-form.validate',
            function (form, validator) {
                console.log('invalid-form.validate');
                CorrectSizesAndPos();
            }
        );
     });
    
  4. 我尝试在 $("#VMCreateForm").validate({ .. }) 内添加一些事件,但它们没有被调用......

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

4

1 回答 1

0

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

    $(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
        };
    })
于 2012-10-10T18:57:36.510 回答