20120802

ASP.NET - 防止按鈕重覆點擊,並出現確認視窗


說明
在ASP.NET中,常要防止使用者惡意使用我們精心撰寫的程式。

 

例如,在購物網站上,使用者在信用卡交易頁面上點擊「確定交易」,但因伺服器尚在和金流商進行交易中,網頁上的按鈕卻可連續點擊,造成重複交易,那之後就有得吵了。

 

所以,我們要用一些方法,來防止使用者重覆點擊已經點擊過的按鈕。

 

為了達成這個目的,我們首先要把Button的UseSubmitBehavior這個屬性設為「false」。

 

為什麼呢?

 

因為在ASP.NET中,Button控制項預設的HTML Type為「Submit」,而不是「Button」。藉由將UseSubmitBehavior此屬性設為「false」,我們可以在Submit之前,透過Javascript來將按鈕的狀態設為不可點擊,或是作一些其他的處理 (如利用DIV蓋過Button…等等)。

 

而我們在伺服器端也應加入檢查,檢查是否為重複交易(如利用MD5, SHA256來確認交易是否重複,或是檢查二次交易之時間)。

 

另外,我們也希望在使用者確定交易前,再透過Javascript來和他確認是否交易。

 

解決方法,請參考下面。

 

 

解決方法
1. 在Visual Studio的Design View中,將Button的UseSubmitBehavior此屬性設為「false」。

201200802-1-ASP.NET-防止按鈕重覆點擊,並出現確認視窗-W
 

2. 在OnClientClick中加入如下程式碼

   1: javascript: if (confirm('請問您確定此筆交易嗎?') == true) {this.disabled=true;} else {return;};


 


3. 在按鈕的Button_Click事件中,加入檢查設定 (如檢查此筆交易之交易碼等),並記得視情況將「Button.Enabled」設為false。



4. 完成。


 


 


結論
網頁程式需要注意的東西很多,不亞於Window Form程式,再加上各瀏覽器對語法之支援程度不同,更造成了撰寫上的困難度。尤其是電子商務,因牽涉範圍廣,又會扯到金流、物流,所以防呆、防惡意破壞的技術,我們一定要好好地掌握,才不會日後改不完。


 


 


參考
按鈕加上詢問訊息
[ASP.NET] 設定 UseSubmitBehaviot 來防止按鈕重複送出&重複點擊方法