跳到主要內容

在使用ASP.NET validation server controls的頁面中防止 Double Submit

上週五,同事在解一個網頁的問題,就是ASP.Net的頁面上,使用了validation server controls去驗證必填欄位,然後全部驗證成功後,為了要防止使用者因為連線過慢而導致連續按"送出"按鈕,進而產生兩張單的問題,當下有想到的解法就是使用JQuery在使用者按下"送出"的時候,把送出按鈕Disable。程式碼如下:


然而卻發現原來JQuery的$("form").submit是在"送出"按鈕被Click就觸發的,所以根本沒有驗證也一樣會讓Button給Disable,所以必須要確認是validation server controls全部驗證完成後,再執行"送出"按鈕被Disable動作,經過Survey發現你可以用JavaScript去檢查Page.IsValid這個值,不過條件是在Submit的按鈕上的CausesValidation屬性必須要設為True才會有動作,Submit如果設定將CausesValidation屬性設為True則validation server controls全部驗證成功,form才會post到Server上,否則如果有一或多個error,則將會進行以下的動作:
1. Submit取消。form不再post back到Server。
2. 任何無效的驗證將顯示出來。
3. 如果驗證是ShowSummary=true,並將收集所有的Error並且呈現。
4. 如果驗證是ShowMessageBox=true,將收集所有的Error並透過Message Box呈現。
因此透過這個特性,所以只要再加上判斷Page.IsValid是否為True,就可以知道是否所有的驗證控制項都驗證成功。
所以將程式改寫成如下:


就可以既完成驗證,又能夠防止使用者Double Submit。
感謝Yi-Ching提供協助測試,並丟了一個好問題,也感謝金龍一起腦力激盪,消耗不少腦細胞。 ^_^
Reference:
1. http://msdn.microsoft.com/en-us/library/system.web.ui.page.isvalid.aspx
2. http://msdn.microsoft.com/en-us/library/aa479045.aspx#aspplusvalid_clientside

留言

這個網誌中的熱門文章

以管理者權限執行批次檔

最近有個專案需要執行批次檔,來進行某些設定或者城市的安裝,在XP上這個Script可以運行沒問題,可是一到Vista以後的Windows版本就無法運行了,最主要的原因是,UAC的管制的問題,幾經尋找,總算找到一個可行的解決辦法。

如何使用電子發票應用API

財政部在電子發票推行上,為了方便開發更多應用所以提供了API可供個人或者廠商進行相關應用的開發,申請的方式請參考 –> 電子發票API申請 最簡單的申請方式就是透過自然人憑證或者工商憑證申請,這樣就不需要檢附任何證明文件。不過這不是本篇的重點,當申請到時會給你一組AppID跟APIKey,然後你可以下載 電子發票應用規格1.4版 來了解怎樣使用這個API,或許是我才疏學淺,所以在1.3版的時候其實搞不太懂他的API文件,到了1.4版才摸清楚發生了什麼事,當然還是花了點時間才搞懂,現在就簡單說明一下API的使用方式,希望看到本篇文章的同好就不需要花時間測試了。

DataGridView欄位統一格式化

最近的工作內有一個需求,就是由於專案中有許多呈現資料的DataGridView,而其中的欄位需要呈現的包含金額、數字或者日期等格式,若要一個個的設定格式,如果有一天格式突然變更,可能就要苦工做到死,如何讓專案中的這些格式都統一就成了一個問題,經過了一番查找,發現可以透過DataGridView.CellFormatting Event來解決這個問題。