2010-06-22 98 views
5

我在ASP.NET網站有付款方式,當用戶點擊asp:Button時,他有時會提交幾次。我想禁用此功能而不損害當前的ASP.NET網站(我的意思是沒有花哨的jQuery,除非它是非常基本的,不會干擾ASP.NET內置驗證)ASP.NET如何禁用按鈕提交?

謝謝!

+0

你希望它永遠後被禁用先點擊? – Samiksha 2010-06-22 12:10:48

+0

@Samiksha,我需要在表單提交後禁用,因爲如果我第一次點擊後禁用它,它被禁用,一旦我點擊驗證數據與ASP.NET驗證。 – eugeneK 2010-06-22 14:18:40

+0

我有更新我的答案,請現在檢查。你需要做的,禁用按鈕之前,你需要檢查Page_ClientValidate() – 2010-06-22 15:04:00

回答

9

您可以輕鬆地做到這一點在客戶端上的按鈕:

onClientClick="this.disabled=true;" 

您也可以使用從穆罕默德的做法與此:

onClientClick="if(Page_ClientValidate()){this.disabled=true;}" 

如果這仍然沒有工作,你可以禁用按鈕之前自行發起回發:

onClientClick="if(Page_ClientValidate()){__doPostBack;this.disabled=true;}" 
+0

@Oded,非常聰明的解決方案,就像它... – 2010-06-22 12:12:56

+0

@Oded,很酷的感謝! – eugeneK 2010-06-22 12:17:34

+1

@Oded,在ASP.NET驗證完成後在Chrome中不起作用。 – eugeneK 2010-06-22 14:16:30

1

您可能會去blockUI。 這真的很不錯,因爲它阻止了完整的用戶界面,不僅僅是按鈕 - 使用戶無法點擊另一個按鈕(例如,您想保存...需要一些時間...用戶同時點擊刪除)

+0

該方法的問題是。有兩件事ASP:按鈕。 1.使用ASP.NET驗證器進行JS驗證。 2.Triggering OnClick =「」 這個腳本可以在客戶端執行,因此會失敗JS驗證。 – eugeneK 2010-06-23 06:47:43

+0

1.我不認爲,這將是一個問題。您可以重新驗證客戶端驗證功能並在驗證無誤後執行阻塞。 2.爲了上帝的緣故,你可以在客戶端觸發一個服務器事件?總結:您應該提供更多信息和一些代碼(code-behind&markup&final html)。順便提一下 – 2010-06-23 07:17:59

+0

- 還有另一種方法:爲什麼不重新編寫表單的提交處理程序。如果表單由最後一個實例提交(例如,您的客戶端驗證),您可以阻止ui,對不對? – 2010-06-23 07:18:33

2

創建靜態方法:

/// <summary> 
/// Disable the button on submit. Remember to set up the validationGroup property if there is more than one form/submit 
/// </summary> 
/// <param name="objButton">The submit button object</param> 
public static void disableSubmitButton(Button objButton) 
{ 
    objButton.CausesValidation = false; 
    string validationGroup = objButton.ValidationGroup; 
    if (string.IsNullOrEmpty(validationGroup)) 
     objButton.Attributes.Add("onclick", "if (Page_ClientValidate()) {this.value=\"Processing...\";this.disabled=true;" + objButton.Page.ClientScript.GetPostBackEventReference(objButton, "").ToString() + "}"); 
    else 
     objButton.Attributes.Add("onclick", "if (Page_ClientValidate(\"" + validationGroup + "\")) {this.value=\"Processing...\";this.disabled=true;" + objButton.Page.ClientScript.GetPostBackEventReference(objButton, "").ToString() + "}"); 
} 

創建一個表單,並把一個按鈕在你的表格(記得設置的ValidationGroup屬性,如果有一個以上的表格/提交):

<asp:Button runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" /> 

打電話給我們頁面加載:

CommonFunctions.disableSubmitButton(btnSubmit); 
2
onClientClick="if(Page_ClientValidate()){__doPostBack;this.disabled=true;}" 
UseSubmitBehavior="false" 
2

我知道這是一個老問題,但所有的答案在某些情況下失敗。主要是你冒險在瀏覽器中出現「Page_ClientValidate is not defined」錯誤。

這種方法確實可行:

public static void DisableSubmitButton(Button button) 
{ 
    button.Attributes.Add("onclick", "this.disabled=true;" + button.Page.ClientScript.GetPostBackEventReference(button, String.Empty)); 
} 
+0

其他答案沒有在我的情況下工作,但這沒有問題。謝謝。 – 2013-03-14 17:30:07