这里简单一点......是否有一种干净的方法可以阻止用户双击网络表单中的按钮,从而导致重复的事件被触发?
如果我有一个评论表格,例如用户输入“这是我的评论”并点击提交,则评论如下所示...但是,如果他们双击,三击或只是坚持键盘可以导致发布多个版本。
客户端我可以很容易地禁用按钮onclick - 但我更喜欢服务器端解决方案,如下所示:)
每个视图状态是否有可以设置的回发超时?例如?
由于
答案 0 :(得分:2)
使用jQuery,您可以使用one事件。
另一个有趣的读物是:Build Your ASP.NET Pages on a Richer Bedrock。
答案 1 :(得分:2)
我不认为你应该为这些琐碎的任务加载服务器。你可以尝试一些像this一样的jquery UI阻塞解决方案。 Microsoft Ajax工具包也应该有一些控制权来做同样的事情。很久以前我用过它,但似乎无法回想起控制名。
答案 2 :(得分:1)
当用户进入Session [“FormXYZSubmitted”] = false之类的页面时设置会话变量。 提交表单时,请检查该变量,如
if((bool) Session["FormXYZSubmitted"] == false) {
// save to db
Session["FormXYZSubmitted"] = true;
}
答案 3 :(得分:0)
我有同样的情况。我的一个同事的解决方案是在Javascript中实现一种Timer,以避免将第二次点击视为点击。
希望有所帮助,
答案 4 :(得分:0)
单击时禁用该按钮,使用jquery或microsoft ajax工具包。
答案 5 :(得分:0)
根据这对您的重要程度,可以创建一次性GUID的数组,一旦处理完更新,您就会从数组中删除它(即在viewstate / hidden字段中回发)
如果回发时guid不在数组中,则请求无效。
在群集环境中替换数组的数据库表。
答案 6 :(得分:0)
如果您使用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);
}
}
}
然后将其添加到母版页Page_Load:
IterateThroughControls(this);