2010-05-23 66 views
1

我想用模態框(facebox)使用asp.net mvc的2客戶端驗證(<%Html.EnableClientValidation();%>)。並且無法使其工作。我嘗試了以下解決方案,其中沒有工作:asp.net客戶端驗證MicrosoftMvcJQueryValidation

http://www.phpvs.net/2010/04/26/manually-validate-an-asp-net-mvc-form-on-the-client-side-with-microsoftmvcvalidation-js-and-jquery/

http://aspnet.codeplex.com/WorkItem/View.aspx?WorkItemId=5270

http://tpeczek.com/2010/04/making-aspnet-mvc-2-client-side.html

我都試過MicrosoftMvcJQueryValidation.js和MicrosoftMvcValidation.js。 的事情是,驗證顯然不加載在模態(facebox)的形式,而它加載其不在模態的表格。

任何人有一個想法?

回答

0

你好,我終於找到了客戶端驗證asp.net的MVC模式與和Ajax形成一個完整的解決方案:

  1. 使用lambda表達式文本框和驗證消息(TextBoxFor ...)
  2. 在MicrosoftMvcJQueryValidation。 JS有一個函數調用替換功能齊全,所以你可以手動調用init從您的局部視圖的現成功能(見下文#代碼1)
  3. 呼叫EnableClientSideValidation(如果您正在使用AJAX鏈接,呼籲的onSuccess事件的函數)。
  4. 如果要發送一個Ajax形式,在下面#代碼2行驗證。

代碼1

$(document).ready(function() { 
    EnableClientSideValidation(); 
}); 

function EnableClientSideValidation() { 
    var allFormOptions = window.mvcClientValidationMetadata; 
    if (allFormOptions) { 
     while (allFormOptions.length > 0) { 
      var thisFormOptions = allFormOptions.pop(); 
      __MVC_EnableClientValidation(thisFormOptions); 
     } 
    } 
} 

代碼2

function validate(formData, jqForm, options) { 
    for (var i = 0; i < formData.length; i++) { 
     if (!formData[i].value) { 
      return false; 
     } 
    } 
} 

如果您正在使用jQuery形式不僅僅是添加beforeSubmit:驗證您的Ajax表單選項。

這就是它!

+0

另一個問題是,如果您使用的是html.beginform幫助程序,則必須爲其指定id以驗證其是否正常工作 - 示例 Html.BeginForm(「action」,「controller」,FormMethod.Post,new {id =「FormID 「})) – Gidon 2010-05-24 10:01:22

+0

我剛剛注意到我粘貼了錯誤的代碼。替換功能用下面的驗證:功能ajaxValidate(FORMDATA,jqForm,選項){jqForm.attr( 'ID'); var formName = jqForm.attr('id'); $('#'+ formName).validate(); if(!$('#'+ formName).valid()){return false; }} – Gidon 2010-08-12 12:49:36