按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"); }
- 未调用AssemblyResolve,并且在序列化期间抛出FileNotFoundException
- 从VS2010迁移到VS2012后,HTML渲染会间歇性地丢失内容
- 多语言网站:Azure部署的行为与localhost不同
- 在PHP中命名参数
- 为什么我不能通过调用aspx文件中的方法来设置asp:Label Text属性?
- 如何在Asp.net中的文件夹中保存图像控制图像
- ASP.Net MVC 4 Web API控制器不能与Unity.WebApi一起使用
- 基于Gridview的RowDataBound事件中的行数据的单元格中的条件输出
- IPostbackEventHandler VS IPostbackDataHandler