[转]屏蔽刷新提交后台
http://www.cnblogs.com/nabber/archive/2010/09/16/1828480.html
现象:当页面进行过数据提交(PostBack)后,如果通过点击【F5】或者浏览器的【刷新】按钮,
此时页面会模拟浏览器的上次的提交事件,如果做的是数据插入操作,将有可能导致数据的多次插入。
原因:浏览器会模拟上次提交的数据在次提交,并在此触发上次提交的时间。
对策:
针对此,网上已经有各种各样的处理方法。大概有以下的两类:
1。通过在事件中,在插入数据之前做主键冲突判定。
2。在HttpHandler中添加票据处理,然后在事件处理中判断是否是刷新进行提交的。
两种方法都需要对事件做特殊的处理,对于项目维护的复杂度有所增加,尤其是第一种需要做数据的逻辑判断,已经影响到了业务逻辑,这是很不好的方法。
然而,我们是否可以让浏览器的刷新成为我们真正想要的刷新,即从新访问页面,而不是模拟上次的提交数据。
其实如果大家对第二种方式熟悉的话,他就是我们想要的方式,然而他需要每个页面的事件都做判断,因而维护程度较复杂,针对此本人做了一些改进。
具体修改方案如下:
1.在页面中声明两个HiddenField,第一个存储前台页面的票据,第二存储后台Session票据的Key。
2.如果前台的票据和Session的票据不相同,则即为刷新,此时DeterminePostBackMode方法返回空,以使页面置为 非PostBack的状态。
3.在OnPreRenderComplete中同步HiddenField和Session中的票据。
为了让各个页面对此事不可见的,将上述逻辑完全封装到Basepage中,使页面完全不需做其他处理。
实例:
BasePage:
测试页面:


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架