Javascript 结合MicrosoftMvcJQueryValidation和Ajax提交

Javascript 结合MicrosoftMvcJQueryValidation和Ajax提交,javascript,jquery,asp.net-mvc,jquery-validate,Javascript,Jquery,Asp.net Mvc,Jquery Validate,在我希望通过Ajax调用提交数据的表单中,尝试应用MS JQuery验证时遇到了问题。我使用DataAnnotations和MicrosoftMvcJQueryValidation.js库来执行客户端和服务器端验证 服务器验证工作得很好,我正试图通过 <% Html.EnableClientValidation(); %> <%= Html.ValidationSummary("Create was unsuccessful. Please correct t

在我希望通过Ajax调用提交数据的表单中,尝试应用MS JQuery验证时遇到了问题。我使用DataAnnotations和MicrosoftMvcJQueryValidation.js库来执行客户端和服务器端验证

服务器验证工作得很好,我正试图通过

     <% 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>
执行客户端验证,但不执行ajax调用,表单通过回发提交

有没有办法让它们在不更改jQuery.validate库的情况下协同工作

可能吗?我是不是用了错误的方法


提前感谢

我没有找到任何解决方案,如何在不修改表单的情况下使用MicrosoftMvcJQueryValidation.js提交ajax表单。以下是我的解决方法:

1) 在“
MicrosoftMvcJQueryValidation.js
”文件中添加以下代码,就在“
表单验证(选项);
”函数中的“
启用客户端验证(验证上下文)
”之前:

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;
    }
}
请记住,您可以添加任何有效的for.validate()函数。必须同时加载jquery.validate和jquery.forms插件


希望有帮助。

绝对有帮助,谢谢。我讨厌编辑MicrosoftMvcJQueryValidation.js,但我现在终于能够通过DataAnnotation利用客户端验证,而不必依赖他们的Ajax.BeginForm()方法,也不需要所有额外的MicrosoftAjax处理程序。谢谢,这对我来说很有用。我真的不想改变MicrosoftMvcJQueryValidation.js
$("input#createBtn").click(function() {
    theform = $(this).closest("form");
    if (theform.validate().form()) {
        jQuery(theform).ajaxSubmit({
            target: "#formContainer"
        });
    }
    else {
        return false;
    }
});
if (typeof (validationContext.validationOptions) != undefined && validationContext.validationOptions != null) $().extend(options, validationContext.validationOptions);
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;
    }
}
valOpt = {
    submitHandler: function(form) {
        $(form).ajaxSubmit({
            target: "#output"
        });
    }
};
setFormValidationOptions("myFormId", valOpt);
$("input#createBtn").click(function() {
    theform = $(this).closest("form");
    if (theform.validate().form()) {
        jQuery(theform).ajaxSubmit({
            target: "#formContainer"
        });
    }
    else {
        return false;
    }
});