2011-08-20 40 views
0

我在創建ASP.NET MVC 2應用程序,它使用數據註釋的客戶端驗證數據生成的過程asp.net的MVC客戶端驗證狀態:需要安裝/拆卸覆蓋

我有以下jQuery來添加覆蓋隨時點擊表格

$(":button").click(function() { 
    var overlay = jQuery('<div id="overlay"><img src="/content/images/indicator2.gif" alt="Processing Request Please Wait"/> </div>'); 
    overlay.appendTo(document.body); 
    }); 

這個工程的大部分時間上的一個按鈕,但我已經注意到,仍然是許多當客戶端驗證失敗覆蓋了一倍。

我希望僅在沒有客戶端驗證錯誤時才附加覆蓋。我怎樣才能獲得客戶端驗證的狀態。

if(client_error==null) 
{ 
attach overlay 

} 

此外,如果這不是爲了覆蓋讓我知道正確的方式。

發現了另一個問題,但沒有答案 https://stackoverflow.com/questions/4848539/block-ui-and-client-side-validations

謝謝

**編輯**

nekno的解決方案是最適合現在。

我發現了另一個鏈接,可以給其他更深入的瞭解您使用的是傳統的形式(Html.BeginForm())或AJAX形式(Ajax.BeginForm())尋找同樣的東西

http://www.phpvs.net/2010/04/26/manually-validate-an-asp-net-mvc-form-on-the-client-side-with-microsoftmvcvalidation-js-and-jquery/

+0

您可以使用BlockUI ---我將其添加到我的示例中,作爲使用'$(「#overlay」)。show()'或您想要製作的任何其他UI選項的替代方法。您仍然需要使用MVC驗證框架來首先獲取錯誤計數。 – nekno

回答

0

如果您使用的是AJAX表單,那麼您可以通過將覆蓋div放在表單上並使用style="display:none;"並將AjaxOptions對象傳遞給表單來處理這種情況,那麼MVC AJAX庫將僅自動顯示/隱藏它如果表單通過驗證並提交。

<% Html.EnableClientValidation(); %> 
<% using(Ajax.BeginForm(new AjaxOptions() { LoadingElementId = "overlay" }) { %> 
<div id="overlay" style="display:none;"> 
    <img src="/content/images/indicator2.gif" alt="Processing Request Please Wait"/> 
</div> 
... 
<% } %> 

你可以看看Brad Wilson的上Unobtrusive Ajax in ASP.NET MVC 3崗位,其中討論了不顯眼的AJAX前MVC 2的行爲爲好。

如果您使用的是傳統表單,那麼您可以將通用展示疊加代碼應用於頁面上的所有表單(如下所示),或者爲表單提供一個ID,以便您可以爲每個表單顯示不同的覆蓋形成。您調用客戶端驗證方法,該方法返回一組錯誤。如果沒有錯誤,驗證成功並繼續提交。這確實會有兩次調用驗證代碼的副作用,因爲MVC驗證框架會掛鉤表單提交事件並自動再次調用validate()。但是,它發生兩次的事實是不可察覺的,實際上,只要您輸入一個值並將焦點移開,動態驗證就會驗證字段,但驗證代碼已在您的頁面上多次運行。它並不總是立即發生兩次。

將這個腳本在您的視圖底部,下面的所有表單標籤:

<script type="text/javascript"> 
    $("form").submit(function (e) { 
     var errors = Sys.Mvc.FormContext.getValidationForForm(this).validate('submit'); 
     if (errors.length == 0) { 
      $("#overlay").show(); 
      // Or use jQuery BlockUI 
      $.blockUI({ message: $("#overlay") }); 
     } 
    }); 
</script> 

more info from Scott Guthrie,他演示了取消表單提交和自己提交。他這樣做是爲了處理來自部分視圖的動態數據。

+0

@ nenko-謝謝你的回覆。我正在做一個傳統的表格,但不知道我是否想驗證兩次。如果沒有找到其他解決方案,我可能會試圖使用你的建議 – TheMar

+0

我明白你的意思,但驗證碼已經多次執行---每次你離開一個字段或更正一個驗證失敗的值,並且再次提交。 – nekno

+0

@ nenko-我從來沒有意識到驗證碼被多次執行。現在你說,這是如此明顯。那麼我想,再說一次就好了。謝謝你的建議。 – TheMar

0

如果您的情況允許,請下載jQuery Block UI插件。將做你想做的事(展示那條信息)。它非常簡單,我一直都在使用它。

+0

Juan-探針不是如何顯示覆蓋圖,但不是如果客戶端驗證失敗,不會激活它。另一位用戶使用Block UI面臨同樣的問題。看看我添加到我的問題的最後一次編輯。正如Nenko建議您仍然需要首先檢查錯誤計數。 – TheMar