代码之家  ›  专栏  ›  技术社区  ›  Mauro

结合MicrosoftMvcJQueryValidation和Ajax提交

  •  2
  • Mauro  · 技术社区  · 16 年前

    在我希望通过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调用管理onclick事件。在我的页面源代码中,我可以看到该部分

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

    但是我想在实际的Ajax调用之前验证数据。

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

    执行客户端验证,但不执行ajax调用,表单通过回发提交。

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

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

    提前谢谢

    2 回复  |  直到 15 年前
        1
  •  3
  •   Feryt    16 年前

    1) 在“中添加以下代码” MicrosoftMvcJQueryValidation.js “文件,就在前面” theForm.validate(options); "function __MVC_EnableClientValidation(validationContext)

    if (typeof (validationContext.validationOptions) != undefined && validationContext.validationOptions != null) $().extend(options, validationContext.validationOptions);
    

    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) 要提交表单,请使用:

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

    请记住,您可以添加任何有效的 options

    希望能有帮助。

        2
  •  3
  •   Brent Anderson    16 年前
    $("input#createBtn").click(function() {
        theform = $(this).closest("form");
        if (theform.validate().form()) {
            jQuery(theform).ajaxSubmit({
                target: "#formContainer"
            });
        }
        else {
            return false;
        }
    });