2011-06-22 238 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 = ''; 
}