2012-10-10 56 views
0

我使用MVC3 C#和我有一些數據註釋模型(驗證規則)MVC3 + jQuery驗證:如何捕捉錯誤或確定事件

在我view.cshtml文件我有一些表格在現有元素上使用絕對座標繪製一些圖形的複雜邏輯。

當用戶提交帶有不正確數據的表單時,jQuery檢查使@ Html.ValidationMessageFor(...)的某些字段可見。現在用戶可以更正數據 - 並立即生成@ Html.ValidationMessageFor(...)消息dissapear。

所以,這顯示/隱藏移動其他頁面元素和此運動打破了我的絕對定位,我需要調用重繪函數(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」)的一些事件。驗證({..}),但他們並沒有援引...

我如何能趕上時unobstrusive驗證是否顯示或隱藏驗證消息?

回答

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 
     }; 
    })