解决因页面刷新而导致重复操作的问题

用过ASP.NET的都知道,按钮操作之后会得到一个新的页面,然后用户通过浏览器的回退按钮可以回到原来的页面时,或者点刷新按钮刷新当前页面时,会显示对话框"不重新发送信息,则无法刷新页面",然后就有个"重试","取消"按钮,通常用户为了刷新页面而点击"重试",这样一点问题就来了,那么页面就会重复发送信息,并且执行先前按钮的操作,比如按钮是添加一行数据,那么刷新之后就会添加重复的数据.好的程序或许会报个提示说什么不能重复添加,甚至出个异常,没有限制的程序可能就任由用户重复的添加数据.这样当然是开发人员不想发生的,除非有极端的用户需求.
最近学了下HttpModule的内容,可用来解决这个问题.
这里利用HttpModule在页面请求之前,做一些操作,用一些标记标识每个请求的页面,程序如下,相互学习下.
首先有个类继承IHttpModule
NoRepeatOperModule

第二步,在web.config中配置自定义的HttpModule
Web.Config配置

最后还要在asp.cs文件中处理如下,加个属性IsRefreshed,重写基类的OnPreRenderComplete,最后调用在btnTest_Click
其实可以吧以下作为自定义的Page类,其他页面继承即可
具体页面实现

点击btnTest之后会写入一行,此时页面重新生成,点刷新或回退,再点"重试",将不会重复原来的操作.
posted @ 2007-10-16 23:04  神八  阅读(971)  评论(0编辑  收藏  举报