0

我正在使用ASP.NET MVC。我的验证效果很好,直到我将一个事件附加到表单的onSubmit事件。Jquery执行onSubmit事件后不显眼验证丢失

这是我的表单外观:

@using (Html.BeginForm("Recover", "Auth", FormMethod.Post, new { Id = "RecForm", onSubmit = "return Events.Submit(this,event)" })) 
{ 
     @Html.TextBoxFor(model => model.Email) 
     @Html.ValidationMessageFor(model => model.Email) 
     <input type="submit" value="Recover" /> 
} 

JavaScript的(正常工作,只是把它放在这里,所以你可以检查东西,这是导致验证不火):

//Events 
window.Events = (function() { 

    // Baseline setup 
    var Events = {}; 

    function disableAllChildren(el) { 
     $(el).find(':input').attr('disabled', true); 
    } 
    function enableAllChildren(el) { 
     $(el).find(':input').attr('disabled', false); 
    } 

    //Ajax submit 
    Events.Submit = function (el, event) { 
     event.preventDefault(); 
     //serialize the form before disabling the elements. 
     var data = $(el).serialize(); 

     disableAllChildren(el); 
     $(el).find('.success, .error').hide(); 
     $.ajax({ 
      url: el.action, 
      type: 'POST', 
      data: data, 
      success: function (data) { 
       //Stuff happens. 
      } 
     }); 
    }; 
    return Events; 
})(this, this.document); 

如何取回我的验证?

+0

不'Events.Submit'完全覆盖提交处理程序,以ASP.NET圈外的? – bzlm

回答

3

我的工作是在提交之前检查表单是否有效。请参阅以下代码:

$form = $("#myForm"); 

if (form.valid()) { 

    form.validate(); 
    //other codes here 

} 

如果表单有效,则发布您的数据。如果没有,什么都不要做。

+0

您的$(el).valid()工作。无论如何,检查内的form.validate()是什么? –

1

代码中存在比验证更多的问题。情况是disabled字段不会发布到服务器。他们也不参与验证。所以,即使你的代码工作,你也不会在服务器端发布任何内容。删除disableAllChildren(el);或重新编码它不是禁用字段,但也许使它们只读。

有了这个,他们将得到验证,但并不令人惊讶的是在ajax提交后。这是你不应该希望的行为,所以看看validate method。特别是你应该对部分地方感兴趣

有效时通过Ajax提交表单。

我相信这种验证形式的ajax提交可以更容易完成。

$(".selector").validate({ 
    submitHandler: function(form) { 
    $(form).ajaxSubmit(); 
    } 
}) 

或者,只是添加验证检查右侧前阿贾克斯提交

+0

这就是为什么我在禁用之前将表单序列化为data var。 –

+0

@Lol编码器 - 我的坏,没有注意到 – archil