按F5键时btnAdd_Click触发

嗨,我有一个简单的代码,可以在按钮点击事件中将数据插入数据库。 它正在执行正常并将数据插入db。 插入数据后,如果按f5按钮,它将再次向db中插入一个具有相同值的新行。

按钮单击事件在每个f5按钮上触发(刷新)

笏是问题?

谢谢你,Nagu

这是设计的。 当你按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. } 

您也可以执行检查数据库端并validation您没有插入相同的数据(这可能不起作用,因为它可能在您的方案中有效)

在过去,我通过编辑来防止这种情况,例如存储修订号并让它提交带有发布数据的修订号。 保存时,如果修订号不匹配(因为每次更新都更改了,并且检查完成了DB侧),则更新失败,我会显示一条消息。

对于新数据,您还可以执行Response.Redirect到“完整”页面,该页面为其提供成功/失败的最新信息。 如果他们点击刷新,他们将只是重新加载已完成的页面,而不是正在进行插入/更新的页面。

还有很多不同的解决方案。 对于每种情况都没有什么是完美的,因此您需要找出最适合您的方案。

您可以采取的一种方法是在回发后重定向Web浏览器。 这将使得按下刷新按钮或F5将导致加载新页面。

例:

 protected void button_Click(object sender, EventArgs args) { // Insert data, etc. Response.AddHeader("Location", "DifferentPage.aspx"); }