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