您好我有一个简单的代码,可以在按钮点击事件中将数据插入到数据库中。它正在执行正常并将数据插入db。插入数据后,如果我按f5按钮,它将再次向db中插入一个具有相同值的新行。
按钮点击事件在每个f5按钮上触发(刷新)
Wat是问题?
谢谢你, 纳古
答案 0 :(得分:2)
这是按照设计的。当你按F5键时,你正在重做刚才做的回发。为了防止这种情况,您可以获得无穷无尽的解决方案,例如:
在初始加载时使用会话变量,并在第一次(保存)发布后清除该值。确保检查是否存在此值。
// On inital page load for data entry store a key.
// This is a basic example, you should have a session wrapper
Session["Unsaved"] = 1;
// When you do the save logic make sure you check this session variable and save if
// it still exists.
if (Session["Unsaved"] != null)
{
// Save data here
Session.Remove("Unsaved");
}
else
{
// Show message that save has already completed or session has expired.
}
您也可以执行检查数据库端并验证您没有插入相同的数据(这可能无法正常工作)
在过去,我通过编辑来阻止这种情况,例如存储修订号并让它提交带有发布数据的修订号。保存时,如果修订号不匹配(因为每次更新都更改了,并且检查完成了DB侧),则更新失败,我会显示一条消息。
对于新数据,您还可以执行Response.Redirect到“完整”页面,该页面为他们提供成功/失败的最新信息。如果他们点击刷新,他们只会重新加载已完成的页面,而不是正在进行插入/更新的页面。
同样有很多不同的解决方案。对于每种情况都没有什么是完美的,所以你需要找出哪种方法最适合你。
答案 1 :(得分:1)
您可以采取的一种方法是在回发后重定向Web浏览器。这将使得按下刷新按钮或F5将导致加载新页面。
示例:
protected void button_Click(object sender, EventArgs args)
{
// Insert data, etc.
Response.AddHeader("Location", "DifferentPage.aspx");
}