2010-01-13 74 views
7

我有一個表單,當提交時,顯示一個繁忙的動畫並禁用提交按鈕。ASP.NET MVC檢查表單輸入在提交時有效

任何人都知道如何查詢微軟的Sys.Mvc.FormValidation以查看錶單是否通過了測試,以便我可以防止顯示忙碌的動畫,如果表單沒有實際提交?有其他解決方法嗎?

目前我客戶端的JavaScript看起來像這樣:

$('form').submit(function() { 
    $('input[type=submit]', this).attr('disabled', 'disabled'); 
    ShowBusy(); 
}); 

乾杯,加文

+0

你爲什麼不接受的答案? – Sampath 2013-04-08 08:40:46

+1

@Sampath - 可能是因爲在一段時間過去之前,stackoverflow不允許我接受我自己的答案,所以我可能忘了它。 – Gavin 2013-04-09 09:33:19

回答

9

我最終放棄了,相反在使用Microsoft ASP.NET MVC 2 RC和MicrosoftMvcJQueryValidation.js從「期貨」項目庫文件來自動線了一切對我來說是jQuery驗證庫堵塞。

本文介紹的過程: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

因此,與有效的所有我需要做的是做出有效的()的調用jQuery驗證...

$('form').submit(function() { 
    if ($('form').valid()) { 
     $('input[type=submit]', this).attr('disabled', 'disabled'); 
     ShowBusy(); 
    } 
}); 
+0

.valid()似乎不起作用? – SteveCl 2011-03-26 18:07:25

+0

嗨SteveCI,不是我想用在上下文中的環境 - 查看原始問題;) – Gavin 2011-03-28 02:00:59

0

使用http://jquery.malsup.com/form/。以下是我的做法 - 此方法處理錯誤(和其他條件)以阻止動畫。它也可以ajaxify形式或立即提交(取決於提交標誌),並做其他事情。

function GenericAjaxForm(form, success, submit, beforeSubmit) { 
    var form = $(form); 
    var options = { 
     beforeSubmit: function(data, frm, options) { 
     form.disable(true); 
     form.find("input:submit:last").after(
      "<span class='ajaxwait'><img src='../Content/images/smallwait.gif' /></span>"); 
     if (beforeSubmit) 
      return beforeSubmit(data, frm, options); 
     }, 
     error: function(xhr, status, error) { 
     $(".validation-summary-errors").html(getAjaxErrorMessage(status, xhr)); 
     form.disable(false); 
     form.find(".ajaxwait").remove(); 
     }, 
     success: function(data) { 
     form.disable(false); 
     form.find(".ajaxwait").remove(); 
     $(".validation-summary-errors").html(''); 
     if (CheckValidationErrorResponse(data, form)) 
      return; 
     success(data); 
     } 
    }; 
    if (submit) 
     form.ajaxSubmit(options); 
    else 
     form.ajaxForm(options); 
} 
+0

謝謝你,但我試圖插入到微軟自己的客戶端MVC驗證庫,而不是我自己的CheckValidationErrorResponse函數。我使用的是使用數據註釋時提供的自動驗證。 我希望有一個很好的簡單方法直接從Sys.Mvc.FormValidation客戶端庫查詢驗證結果,但還沒有發現任何東西。 如果沒有運氣,可能需要考慮交換JQuery驗證。碰到來自Microsoft的「期貨」項目,而不是使用JQuery的驗證庫進行自動驗證。 – Gavin 2010-01-14 20:32:16

0

這隻適用於MVC 1.0,在MVC 2.0中微軟切換到使用jQuery,這不再起作用。

onformSubmit: function (e) { 
    if (!Sys.Mvc.FormContext && Sys.Mvc.FormContext.getValidationForForm(this).validate('submit').length) { 
    return; 
    showBusy(); 
} 

如果您正在使用的Ajax.BeginForm助手,你可以這樣做

Ajax.BeginForm("action","controller", AjaxOptions{ OnBegin="onformSubmit",...}