2009-11-03 101 views
2

我遇到了麻煩,試圖在我想通過Ajax調用提交數據的表單中應用MS JQuery驗證。我使用DataAnnotations和MicrosoftMvcJQueryValidation.js庫來執行客戶端和服務器端驗證。結合MicrosoftMvcJQueryValidation和Ajax提交

服務器驗證的偉大工程,我試圖通過

 <% Html.EnableClientValidation(); %> 
    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %> 

    <div id="formContainer"> 
     <% using(Html.BeginForm()){ %> 

      <table class="formTable" width="100%" border="0" cellspacing="0" cellpadding="0"> 

      <tr> 
       <td><label for="Description">Description:</label></td> 
       <td><%= Html.TextBox("Description", Model.Description) %> 
       <%= Html.ValidationMessage("Description", "*") %></td> 
      </tr> 
      <tr> 
       <td> </td> 
       <td> 
       <%=Html.Button("cancelBtn","Cancel")%> 
       <input id='createBtn' class='button' type='button' value='Create' /> 
       </td> 
      </tr> 

      </table> 
     <% } %> 

    </div> 

onclick事件平均以啓用客戶端驗證,然後通過自定義的Ajax調用管理。在我的網頁源我可以看到部分

//<![CDATA[EnableClientValidation(...)] 

但我想實際的Ajax調用之前驗證數據。

在相反通過使用提交輸入和

inputCreate.submit(function() {$.ajax...}); 

進行客戶端驗證,但不執行AJAX調用,形式是通過回發提交。

有什麼辦法可以讓它們一起工作而不用改變jQuery.validate庫嗎?

可能嗎?我對此採用了錯誤的方法嗎?

在此先感謝

回答

3

我沒有找到任何解決辦法如何使用MicrosoftMvcJQueryValidation.js到AJAX提交表單,而無需修改它。這裏是我的解決方法:

1)加入 「MicrosoftMvcJQueryValidation.js」 文件如下因素代碼,只是 「theForm.validate(options);」 在"function __MVC_EnableClientValidation(validationContext)「前:

2)使用這個js函數來自己的選項添加到.validate()方法:

function setFormValidationOptions(formId, options) { 
    if (typeof (formId) == undefined || formId == null || typeof (options) == undefined || options == null) return; 
    if (window.mvcClientValidationMetadata) { 
     for (i = 0; i < window.mvcClientValidationMetadata.length; i++) 
      if(window.mvcClientValidationMetadata[i].FormId == formId) 
       window.mvcClientValidationMetadata[i].validationOptions = options; 
    } 
} 

3)到AJAX提交形式使用:

valOpt = { 
    submitHandler: function(form) { 
     $(form).ajaxSubmit({ 
      target: "#output" 
     }); 
    } 
}; 
setFormValidationOptions("myFormId", valOpt); 

請記住,您可以爲.validate()函數添加任何有效的options。必須加載jquery.validate和jquery.forms插件。

希望它有幫助。

+0

絕對有幫助,謝謝。我討厭編輯MicrosoftMvcJQueryValidation.js,但現在我終於可以通過DataAnnotations來使用客戶端驗證,而無需依賴Ajax.BeginForm()方法,而無需使用所有額外的MicrosoftAjax處理程序。 – kdawg 2010-07-29 14:34:54

3
$("input#createBtn").click(function() { 
    theform = $(this).closest("form"); 
    if (theform.validate().form()) { 
     jQuery(theform).ajaxSubmit({ 
      target: "#formContainer" 
     }); 
    } 
    else { 
     return false; 
    } 
}); 
+1

謝謝,這對我有用。我真的不想更改MicrosoftMvcJQueryValidation.js – Richard 2010-10-14 12:29:03