防止快速提交按钮点击?

时间:2011-06-22 06:13:41

标签: c# .net asp.net

我找到了这样的解决方案,但我的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. ";
                }
            }

        }

5 个答案:

答案 0 :(得分:1)

禁用Button服务器端将不起作用,在PostBack之后Button将被禁用,此时用户仍然可以多次单击,在JavaScript this.disabled=true;中禁用它是成功执行此操作的唯一方法。

答案 1 :(得分:1)

您尝试阻止用户多次提交表单的情况最好使用发布/重定向/获取模式进行处理。

这是一个非常简单的模式,维基百科很好地解释了它: http://en.wikipedia.org/wiki/Post/Redirect/Get

答案 2 :(得分:0)

我假设您要跳过之前点击的某个TimeSpan内的点击次数。创建一个类变量“DataTime LastClickTime”,最初设置为DateTime.MinValue。当您输入单击处理程序时,请检查DateTime.Now - LastClickTime&gt; TimeSpan(...需要...)如果不是,请退回点击处理程序并返回。

答案 3 :(得分:0)

尝试使用javascript禁用该按钮而不是禁用服务器端?

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

答案 4 :(得分:0)

一种方法是从Javascript中隐藏按钮并显示一些ajax加载程序图像。

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