防止用户双击或刷新页面会导致执行SQL插入语句两次的最佳方法是什么,我尝试在单击后禁用该按钮,但结果并不是很好。我期待有可能从代码隐藏中做到这一点。更像是SQL提交和回滚
答案 0 :(得分:1)
也许PRG wikipedia article可以为您提供帮助:
发布/重定向/获取(PRG)是Web开发人员的常见设计模式 帮助避免某些重复的表单提交并允许用户代理 使用书签和刷新按钮更直观地表现。
答案 1 :(得分:1)
如果您希望防范这种情况,您将需要服务器知道当前用户已经开始执行操作,并且在满足条件之前无法再次启动它。
您需要能够在可能访问您网站的众多用户中识别该用户。这最简单地使用SessionState完成,但如果您没有其他需要SessionState并且希望大规模扩展您的应用程序,则可以使用用于标识用户的简单随机cookie作为用于将项目放入其中的任何键的前缀。服务器缓存。
假设您使用了SessionState。你会做类似以下的事情(伪):
public void StartAction()
{
var inProgress = HttpContext.Current.Session["actionInProgress"] as bool;
if (!inProgress)
{
try
{
HttpContext.Current.Session["actionInProgress"] = true;
MySqlController.DoWork();
}
finally
{
HttpContext.Current.Session["actionInProgress"] = false;
}
}
}
以上内容未考虑以下内容:
finally
块