2012-01-18 60 views
0

单击一个按钮时,如果另一个表单在同一页(不是ligthbox)中有效,我想要一个表单。该验证是我创建的自定义验证并且工作正常。 这是鉴于自定义验证不适用于Ajax MVC调用

$("#btnSave").click(function (e) { 

      if ($("#GeneralButtonFrm").valid()) { 

       $("#ButtonFrm").submit(); 

      } else { 
       //Error Message 
      } }); 

代码的问题是,提交的动作,而无需等待自定义验证其返回false的响应执行。

任何想法为什么会发生这种情况?注:我说我没有使用ligthbox呈现部分becouse在这种情况下,解决方案将是jQuery.validator.unobtrusive.parse('#form');

谢谢

+0

如果GeneralButtonFrm使用AJAX呈现,你必须使用jQuery.validator.unobtrusive.parse,或者是它使用ajax的自定义验证器?使用ajax的验证器有点棘手,你需要返回false它们是无效的,那么当你从服务器得到答案时,如果该值有效,则需要设置一个标志,然后重新验证表单并根据标志返回true或false。我希望我很清楚:D – Anders 2012-01-18 14:19:30

+0

感谢您的快速回答。你是什​​么意思与“无效时返回假”?以及如何/从哪里可以得到服务器的答案? – 2012-01-18 16:12:06

+0

只为了让一切顺利,你有一个自定义的规则,试图验证使用AJAX? – Anders 2012-01-20 12:00:09

回答

0

你仍然非常含糊,在你的问题。但我认为你想要的是调用ajax并进行服务器端验证。如果是这样,问题是,你的验证将Ajax请求之前,因为Ajax请求是异步返回..做这个

<html> 
    <head> 
     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
     <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script> 
     <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script> 
     <script type="text/javascript"> 
      jQuery.validator.addMethod("ajaxCustom", function (value, element) { 
       var wrap = $(element); 
       var url = wrap.data("customAjaxUrl"); 
       var result; 

       $.ajax({ 
        type: 'GET', 
        url: url, 
        dataType: 'json', 
        success: function (data) { 
         result = data.valid; 
        }, 
        data: { value: value, id: element.id }, 
        async: false 
       }); 

       return this.optional(element) || result; 

      }, "Ajax"); 

      $.validator.unobtrusive.adapters.addBool('ajaxCustom'); 
      </script> 
     <style type="text/css"> 
      .input-validation-error { 
       background: red; 
      } 

     </style> 

    </head> 
    <body> 

     <form action="/"> 
      <input data-val-ajaxCustom="Tuckel" data-val="true" data-val-required="Its required" data-custom-ajax-url="validate.html" /> 
      <button type="submit">Submit</button> 
     </form> 
    </body> 
</html>