2011-06-22 339 views
0

我發現了這樣一個解決方案,但我的onclick事件已經綁在代碼隱藏處理程序:防止快速提交按鈕點擊?

MyButton.Attributes.Add("onclick", "this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(MyButton, "").ToString()); 

onclick="this.disabled=true;__doPostBack('MyContrl$MyButton','');" 

我的代碼:

<asp:imagebutton id="CheckoutBtn" runat="server" ImageURL="Styles/Images/submit.gif" onclick="CheckoutBtn_Click"> 

後臺代碼:

protected void CheckoutBtn_Click(object sender, ImageClickEventArgs e) 
     { 
      { 

       MyShoppingCart usersShoppingCart = new MyShoppingCart(); 
       if (usersShoppingCart.SubmitOrder(User.Identity.Name) == true) 
       { 
        CheckOutHeader.InnerText = "Thank you."; 
        Message.Visible = false; 
        CheckoutBtn.Visible = false; 
       } 
       else 
       { 
        CheckOutHeader.InnerText = "Submission Failed - Please try again. "; 
       } 
      } 

     } 
+0

什麼是你的問題? – JeremyWeir

+0

嗨,我需要防止用戶多次點擊一個提交按鈕,如標題所示。 – k80sg

回答

0

我假設您想跳過以前點擊的某個TimeSpan內的點擊。創建一個類變量「DataTime LastClickTime」,最初設置爲DateTime.MinValue。當你輸入點擊處理程序時,檢查是否DateTime.Now - LastClickTime> TimeSpan(... desired ...),如果不是,退出點擊處理程序並返回。

0

嘗試禁用與JavaScript的按鈕,而不是禁用它的服務器端?

<asp:imagebutton id="CheckoutBtn" runat="server" ImageURL="Styles/Images/submit.gif" onclick="CheckoutBtn_Click" OnClientClick="this.disabled=true;"> 
+0

嗨,謝謝,但我不認爲我的CheckoutBtn_Click事件會起作用,因爲即使在第一次嘗試時,它也會禁用按鈕。 – k80sg

+0

嗯?如果您使用JavaScript禁用按鈕,則會發生以下情況 - 1)該按鈕將在用戶瀏覽器中禁用,2)將發生回發,這會觸發CheckoutBtn_Click,3)當該事件正在運行時,用戶將無法進一步點擊按鈕。 4)事件完成後,您可以重新啓用按鈕或重定向用戶。 –

+0

謝謝,我剛剛嘗試過,但不是觸發我的CheckoutBtn_Click,它在代碼背後激發Page_load,任何想法? – k80sg

1

禁用按鈕服務器端將無法正常工作,該按鈕會在回發後停用,就在這個時候,用戶還可以點擊多次,在JavaScript this.disabled=true;禁用它是成功地做到這一點的唯一方法。

+0

然後當服務器沒有響應用戶結束了一個破碎的頁面。 – CodesInChaos

0

一種方法是隱藏Javascript中的按鈕並顯示一些ajax加載器圖像。

function btnClientClick() 
{ 
    document.getElementById('CheckoutBtn').style.display = 'none'; 
    document.getElementById('dvLoader').style.display = ''; 
}