2013-01-10 97 views
0

我試圖實現某種解決方案的'雙提交'的問題發生時,有一個提交按鈕,觸發需要一些時間運行的代碼例程。禁用'提交'按鈕沒有javascript

不幸的是,有很多用戶仍然使用舊的互聯網瀏覽器和一些運行無腳本插件。我無法使用JavaScript。

有沒有辦法在點擊asp.net中的按鈕後禁用按鈕?

+0

不知道爲什麼這是downvoted ...我想OP問一個明智的問題 – freefaller

+0

長期運行的過程的替代解決方案是釋放UI並將任務傳遞給另一個線程。例如,一旦用戶點擊按鈕,回發到服務器並安排任務(讓後臺線程執行該任務)。然後返回給用戶,並提示您的任務已安排。 – Win

+0

@Win往返旅程需要一兩秒鐘,可能需要較長的連接時間。雙擊很快就會發生(至少可能)。 – Servy

回答

2

由於您想在用戶點擊後(以及您的頁面仍在載入時)禁用按鈕,它必須在客戶端完成。 JavaScript是唯一可以用於此目的的客戶端語言。

因此,請確保如果用戶禁用Javascript(這些日子不太可能),您的最終頁面可以處理「雙重提交」的數據。

1

短篇小說,沒有。

在您的情況下,您需要製作一些服務器端代碼來檢測雙重帖子,然後放棄重複請求。

0

您可以在每個按鈕單擊並將其放入會話後啓動服務器上的計時器。在下一次點擊時,您可以檢查計時器並應用或拒絕下一個用戶單擊。

-2
在按鈕單擊事件

只寫代碼

{ 

//Some Code 

button1.Enabled = false; 

} 
+0

這並沒有解決用戶在頁面刷新前第二次單擊按鈕的問題(想想上傳一個大文件需要多長時間) – freefaller

+0

您是否看到「沒有Javascript的問題」部分「? –

0

因此,這將是不可能的禁用按鈕不一些還挺客戶端腳本。如果你認爲它會被禁用,無論它是什麼樣的客戶端腳本,那麼這是一個不可能完成的任務。

可以做的是確保他們試圖執行的操作永遠不會每頁加載運行超過一次。

  1. 當加載頁面時創建一個隱藏字段;用GUID填充該字段。
  2. 在服務器端單擊處理程序的開始處輸入一個Lock塊。
  3. 根據該GUID檢查是否存在會話密鑰。 (給它一個前綴,以便它不會與任何其他基於GUID的會話密鑰相沖突。)
  4. 如果密鑰存在,則退出lock塊並不執行任何操作,或顯示某種錯誤消息。
  5. 如果他們的密鑰不存在,則向該會話密鑰添加一個新值,退出lock塊,然後執行操作。給會話密鑰一個適當的過期時間;它不應該超過幾分鐘。你甚至可以在操作結束時刪除相關的會話密鑰,如果在此時重複該操作是有意義的。