2010-05-23 188 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