2012-07-26 109 views
0

我的問題是當頁面加載第一次,警報(1)和警報(2)彈出,但當我點擊我的保存按鈕警報(3)不彈出,但顯示驗證消息(如果我填寫正確或錯誤的下拉列表,則不會計量),並保存所有內容。 我有這樣的JS:在asp.net MVC3的Javascript驗證

 <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
    <script type="text/javascript"> 

     $(document).ready(function() { 
      alert(1); 
      PassWayValidators(); 
      $('#documents_TravelDocumentDocumentPass_PassDate').datepicker();   

     }); 

     function PassWayValidators() { 
      alert(2); 
      $.validator.addMethod('PassWayValidator', 
        function (value, element) { 
         alert(3); 
        }, 'Please Inert Valid Numbers'); 

      $("#documents_TravelDocumentDocumentPass_PassWayId").rules("add", { 
       PassWayValidator: true 
      }); 
     } 
    </script> 
    <...Some Code Here...> 
     <div class="TravelDocumentDocumentPassCommentInner"> 
           <span>გადაცემის ფორმა 
            <br /> 
            @Html.DropDownListFor(model => documents.TravelDocumentDocumentPass.PassWayId, (IEnumerable<SelectListItem>)ViewBag.DocumentPassTypeList, String.Empty, isDisabled) 
            @Html.ValidationMessageFor(model => documents.TravelDocumentDocumentPass.PassWayId, "*") 
           </span> 
          </div> 
    <...Some Code Here too... and> 
@Html.ValidationSummary() 

誰能告訴我是什麼問題?

回答

0

由於您正在編寫自定義驗證程序,因此我發現有兩件事需要糾正。

首先,您需要在$(document).ready()之外呼叫PassWayValidators();。我不是100%確定這是必要的,但我認爲這是我能夠使自定義驗證工作的唯一方法。

PassWayValidators(); 

$(document).ready(function() { 
    $('#documents_TravelDocumentDocumentPass_PassDate').datepicker();      
}); 

然後,您需要配置您的下拉菜單,以確保它通過指定某些html屬性來調用您的驗證功能。

@Html.DropDownListFor(model => 
    documents.TravelDocumentDocumentPass.PassWayId, 
    (IEnumerable<SelectListItem>)ViewBag.DocumentPassTypeList, 
    String.Empty, 
    new { 
     data_val = "true", 
     data_val_PassWayValidator = "Please insert valid numbers" 
    }) 

就是這樣的。我不知道哪些規則(「添加」)適用,但我不確定是否需要這些規則。如果我錯過了某些東西,下面是從我的一個應用程序中抽取的完整樣本。

<!-- some form and other html and stuff --> 
@Html.TextBox("Amount", null, new 
{ 
    data_val = "true", 
    data_val_required = "This field is required", 
    data_val_number = "The field must be a number", 
    data_val_notBeZero = "Value must not be zero" 
}) 

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> 

<script type="text/javascript"> 
    // validators 
    $.validator.addMethod("notBeZero", function (value, element) 
    { 
     if (Number(Math.abs(value).toFixed(2)) == 0) 
     { 
      return false; 
     } 

     return true; 

    }, "Value must not be zero"); 

    $.validator.unobtrusive.adapters.addBool("notBeZero"); 
</script>