2010-08-27 148 views
7

這裏很簡單...是否有一種乾淨的方式來阻止用戶雙擊Web窗體中的按鈕,從而導致重複事件觸發?防止ASP.Net(C#)中的重複回發

如果我有一個評論表單,例如用戶鍵入「這是我的評論」,點擊提交,評論如下所示...但是,如果他們雙擊,三擊或只是堅持鍵盤他們可以導致多個版本被張貼。

客戶端,我可以很容易的onclick禁用按鈕 - 但我更喜歡的服務器端解決方案,這樣的事情:)

有每個視圖狀態回傳超時可以例如設置?

由於

回答

2

我不認爲你應該加載服務器,爲這些瑣碎的任務。你可以嘗試一些像jQuery UI鎖解決方案,如this之一。微軟的Ajax工具包也應該有一些相同的控制。我很久以前就用過它,但似乎無法回想起控制名稱。

+0

公平點,客戶端! – isNaN1247 2010-08-27 10:43:42

+0

鏈接似乎已經死亡。 – 2013-10-24 11:10:58

1

設置當用戶進入會議等[「FormXYZSubmitted」] =假頁面一個會話變量。 當提交表格時,請檢查變量類似於

if((bool) Session["FormXYZSubmitted"] == false) { 
    // save to db 
    Session["FormXYZSubmitted"] = true; 
} 
+0

你可以做到這一點按鈕點擊事件,以及準確地說, – 2010-08-27 10:37:36

+0

我沒有包括這個,但它是正確的。 – Zafer 2010-08-27 10:44:28

0

我有過相同的情況。我的一位同事的解決方案是在Javascript中實現一種計時器,以避免將第二次點擊看作點擊。

希望幫助,

0

禁用單擊按鈕,利用jquery或microsoft ajax工具包。

0

根據這是多麼重要你的,可以創建一個時間GUID的數組,你從數組中刪除,一旦更新已被處理(即調回在ViewState中/隱藏字段)

如果GUID不在回發數組中,請求無效。

在集羣環境中用數組替換數據庫表。

0

如果您使用Asp.Net驗證,客戶端可能會很棘手。

如果你有一個母版頁,把這個母版頁:

void IterateThroughControls(Control parent) 
    { 
     foreach (Control SelectedButton in parent.Controls) 
     { 
      if (SelectedButton is Button) 
      { 
       ((Button)SelectedButton).Attributes.Add("onclick", " this.disabled = true; " + Page.ClientScript.GetPostBackEventReference(((Button)SelectedButton), null) + ";"); 
      } 

      if (SelectedButton.Controls.Count > 0) 
      { 
       IterateThroughControls(SelectedButton); 
      } 
     } 
    } 

然後將其添加到母版頁的Page_Load:

IterateThroughControls(this);