【问题标题】:Combining MicrosoftMvcJQueryValidation and Ajax Submit结合 MicrosoftMvcJQueryValidation 和 Ajax 提交
【发布时间】:2009-11-03 10:10:40
【问题描述】:

我在尝试通过 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 库的情况下协同工作?

有可能吗?我是否使用了错误的方法?

提前致谢

【问题讨论】:

    标签: javascript jquery asp.net-mvc jquery-validate


    【解决方案1】:

    我没有找到任何解决方案如何使用 MicrosoftMvcJQueryValidation.js 来 ajax 提交表单而不修改它。这是我的解决方法:

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

    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) 向 ajax 提交表单使用:

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

    请记住,您可以为 .validate() 函数添加任何有效的 options。 jquery.validate 和 jquery.forms 插件都必须加载。

    希望对你有帮助。

    【讨论】:

    • 绝对有帮助,谢谢。我讨厌不得不编辑 MicrosoftMvcJQueryValidation.js,但我现在终于能够通过 DataAnnotations 使用客户端验证,而无需依赖其 Ajax.BeginForm() 方法,而无需所有额外的 MicrosoftAjax 处理程序。
    【解决方案2】:
    $("input#createBtn").click(function() {
        theform = $(this).closest("form");
        if (theform.validate().form()) {
            jQuery(theform).ajaxSubmit({
                target: "#formContainer"
            });
        }
        else {
            return false;
        }
    });
    

    【讨论】:

    • 谢谢,这对我有用。我真的不想更改 MicrosoftMvcJQueryValidation.js
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多