2016-04-14 34 views
0

我以爲我會從post開始工作,它給了我實際的答案。它在JSfiddle中的工作方式與之前的文章中的相同,但是我無法在項目中使用它。我認爲代碼是正確的,它只是沒有驗證提交的文本框。無法在我的ASP.NET Core MVC6項目中獲取jquery.validation workin

這是頁面的標記:

<form action="/CompanyDetails/Edit" method="post"> 
    <div class="form-horizontal"> 
    <h4>CompanyDetailsViewModel</h4> 
    <hr /> 
    <div class="text-danger validation-summary-errors"> 
     <ul> 
     <li style="display:none"></li> 
     </ul> 
    </div> 
    <input type="hidden" data-val="true" data-val-required="The CompanyDetailsId field is required." id="CompanyDetailsId" name="CompanyDetailsId" value="1" /> 
    <div class="form-group"> 
     <label class="col-md-2 control-label" for="ABN">ABN:</label> 
     <div class="col-md-10"> 
     <input type="text" name="ABN" id="ABN" class="form-control" /> 
     <span class="text-danger field-validation-error" data-valmsg-for="ABN" data-valmsg-replace="true" /> 
     </div> 
    </div> 

表單按鈕:

<div class="form-group"> 
    <div class="col-md-offset-2 col-md-10"> 
    <input type="submit" value="Save" class="btn btn-default" /> 
    </div> 
</div> 

的形式呈現,但是當我點擊保存,而不是它顯示一個錯誤,它只是追溯到控制器,但是ModelState是錯誤的。

我已經通過Firefox在實際驗證腳本上設置了斷點,但它甚至沒有觸發。

爲什麼驗證腳本不能在asp.net頁面中工作而在JSFiddle中工作

回答

0

我在將我的頭撞在牆上幾個小時後,我就完成了這項工作。事實證明,驗證是在Asp.net內核中自動完成的,這取決於您在視圖使用的模型中設置的內容。因此,如果您有像[Requred]這樣的數據註釋,那麼它將作爲標籤幫助轉換的一部分添加到標記中。

所以我真正想要的是「添加」另一個規則不驗證它,我有。究竟發生了什麼事情是ABN已經有一個[必須的]規則,所以我的自定義規則沒有發生,因爲它需要添加。一旦我積極添加新規則,那麼一切都開始奏效。我決定添加另一個自定義規則來檢查字符串的長度,以查看規則是否是連續的。也就是說,一旦發現「false」,對該標識符的驗證就會停止。在這種情況下,驗證ABN到澳大利亞稅務局算法的最後一條規則也會檢查長度,但如果位數不符合規則,則永遠不會到達那裏。

順便說一下,劇本已被放置在@section腳本{}的驗證腳本所以它的一切後,之後呈現...

通過快樂的方式,如果我有任何的這個錯誤,我要反駁我仍然只是學習..

反正這裏是代碼:

<script> 
    $(function() { 

     // Your custom validation method 
     jQuery.validator.addMethod('abnValidate', function abnValidate(value, element) { 
      if (value.length != 11 || isNaN(parseInt(value))) 
       return false; 
      var weighting = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]; 
      var tally = (parseInt(value[0]) - 1) * weighting[0]; 
      for (var i = 1; i < value.length; i++) { 
       tally += (parseInt(value[i]) * weighting[i]); 
      } 
      return (tally % 89) == 0; 
     }); 

     jQuery.validator.addMethod('exactlength', function (value, element) { 
      if (value.length != 11 || isNaN(parseInt(value))) 
       return false; 
      return true; 
     }); 

     $("#ABN").rules("add", { 
      required: true, 
      exactlength: true, 
      abnValidate: true, 
      messages: { 
       required: "Required input", 
       exactlength: "ABN has to be 11 digits long.", 
       abnValidate: "The ABN does not conform to the ATO's algorithm" 
      } 
     }); 
    }); 
</script> 
相關問題