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