防止双击Button

时间:2011-06-20 08:43:29

标签: asp.net-3.5 double-click

我一直遇到问题,用户双击我的网络应用程序上的操作按钮,这意味着重复记录被添加到我的数据库中,有时用户被收取两次费用(因为操作正在运行两次)

防止在ASP.NET中双击的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

我发现你在没有启用javascript的用户面前对此表示担忧。如果是这种情况,您需要在服务器端处理它。处理此问题的一个想法是在整个应用中实施CSRF tokens

这基本上在服务器端会话中保留令牌,并且还要求在请求中提交令牌。如果您及时在会话中重置此令牌(并假设您使用通常的ASP.Net机制来序列化对会话的访问),则第二个请求将使用过期令牌,并且可以忽略。< / p>

答案 1 :(得分:1)

我认为最好的解决方案是在点击使用Javascript后禁用按钮。尝试添加onclick功能:

<input type="submit" onclick="disable_button(this);" />
<script type="text/javascript>
    function disable_button(sender){
        sender.disabled = true;
    }
</script>

也可以使用服务器控件使用服务器端代码完成。将其粘贴到pre-render或page_load事件中:

yourButton.Attributes.Add("onclick", " this.disabled = true; "+ ClientScript.GetPostBackEventReference(Button1,null)+";");

这将基本上禁用Button,只要你点击它然后调用服务器端代码就好像点击了按钮一样。

答案 2 :(得分:0)

您是否尝试过向提交按钮添加一些JavaScript?

e.g。
<input type="button" onClick="formSubmit.disabled=true;">

这样,按钮在第一次点击后立即被禁用,不会进行第二次点击......

答案 3 :(得分:0)

我在没有启用或禁用按钮的情况下使用会话变量解决了这个问题。 在Page_Load中添加:

Session["clicked01"] = "0";
btnSave_Click中的

if (Session["clicked01"] == "1")
{
    return;
}
/// save the record
Session["clicked01"] == "1"