我找到了这样的解决方案,但我的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 :(得分: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 = '';
}