0

私は MVC3 C# を使用しており、いくつかのデータ注釈 (検証ルール) を持つモデルがあります

私の view.cshtml ファイルには、既存の要素に絶対座標を使用していくつかの図を描画する複雑なロジックを含むフォームがあります。

ユーザーが誤ったデータでフォームを送信すると、jQuery チェックにより @Html.ValidationMessageFor(...) の一部のフィールドが表示され、ユーザーはデータを修正できるようになり、@Html.ValidationMessageFor(...) メッセージが即座に消えます。

したがって、この表示/非表示は他のページ要素を移動し、この移動は絶対位置を壊し、再描画関数 ( CorrectSizesAndPos(); ) を呼び出す必要があります。

これらの厄介な highlite/unhigligt イベントをキャッチするにはどうすればよいですか?

今のところ:

  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 に答える