防止ASP.Net(C#)中的重复回发

防止ASP.Net(C#)中的重复回发,c#,asp.net,postback,C#,Asp.net,Postback,这里有一个简单的。。。是否有一种干净的方法可以防止用户双击web表单中的按钮,从而引发重复事件 例如,如果我有一个评论表单,用户键入“这是我的评论”并单击提交,评论如下所示。。。但是,如果他们双击、三次单击或只是在键盘上发疯,可能会导致发布多个版本 客户端我可以很容易地禁用onclick按钮,但我更喜欢服务器端解决方案,而不是这样:) 例如,是否可以设置每个viewstate的回发超时 谢谢当用户进入类似会话的页面时设置会话变量[“FormXYZSubmitted”]=false。 提交表单时,

这里有一个简单的。。。是否有一种干净的方法可以防止用户双击web表单中的按钮,从而引发重复事件

例如,如果我有一个评论表单,用户键入“这是我的评论”并单击提交,评论如下所示。。。但是,如果他们双击、三次单击或只是在键盘上发疯,可能会导致发布多个版本

客户端我可以很容易地禁用onclick按钮,但我更喜欢服务器端解决方案,而不是这样:)

例如,是否可以设置每个viewstate的回发超时


谢谢

当用户进入类似会话的页面时设置会话变量[“FormXYZSubmitted”]=false。 提交表单时,检查变量,如

if((bool) Session["FormXYZSubmitted"] == false) {
   // save to db
   Session["FormXYZSubmitted"] = true;
}

我也经历过同样的情况。我的一位同事的解决方案是用Javascript实现一种计时器,以避免将第二次单击视为单击


希望对您有所帮助,

通过jQuery,您可以利用该事件


另一个有趣的阅读是:。

我认为您不应该为这些琐碎的任务加载服务器。您可以尝试一些jQueryUI阻塞解决方案,比如一个。MicrosoftAJAX工具包也应该有一些控件,它们可以执行相同的操作。我很久以前就用过它了,但似乎记不起控件名了

在单击时禁用按钮,利用jquery或microsoft ajax toolkit。

根据这对您的重要性,可以创建一个一次性GUID数组,在处理更新后将其从数组中删除(即在viewstate/隐藏字段中发回)

如果回发时guid不在数组中,则请求无效


在集群环境中用数据库表代替数组。

如果使用Asp.Net验证,客户端可能会很棘手

如果您有母版页,请将其放入母版页:

 void IterateThroughControls(Control parent)
    {
        foreach (Control SelectedButton in parent.Controls)
        {
            if (SelectedButton is Button)
            {
                ((Button)SelectedButton).Attributes.Add("onclick", " this.disabled = true; " + Page.ClientScript.GetPostBackEventReference(((Button)SelectedButton), null) + ";");
            }

            if (SelectedButton.Controls.Count > 0)
            {
                IterateThroughControls(SelectedButton);
            }
        }
    }
然后将其添加到母版页加载:

IterateThroughControls(this);

你们也可以在按钮点击事件中做到这一点,以确保精确性。链接似乎已经死了。