文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程Asp.Net因页面刷新而重复操作的解决方法
精品推荐
特别推荐
·.net基础知识错误注意二十二点知识
·asp.net2.0学习历程 菜鸟到中级程序员的飞跃
·.NET基础知识-什么是.NET
·初学C#+ASP.NET+Oracle时积累的备忘点滴
·专家详解:复杂表达式的执行步骤
·asp.net中的加密方法
·DataGrid常见关注问题解决方案
·学习笔记 ASP.NET 5种页面转向法
·ASP.NET网络编程中经常会用到的27个函数集
·ASP.NET之上传文件管理策略
·专家:用.NET动态创建类的实例讲解
·ASP.NET WEB服务和Flash打造MP3播放器
·精通ASP.NET中弹出窗口技术
·asp.net常用代码
·asp.net创建文件夹的IO类的问题
·Asp.Net函数集
·Asp.net cache 简述
·如何最大限度提高.NET的性能 (续)
·.NET编程规范
·Asp.net1.1升级到2.0遇到的一些问题总结
热点TOP10
·ASP.NET上传文件的实例
·Access 通用数据访问类(asp.net 2.0 c#)
·ASP.NET2.0下含有DropDownList的GridView编辑、删除的完整例子!
·asp.net程序中最常用的三十三种编程代码
·asp.net(C#)海量数据表高效率分页算法(易懂,不使用存储过程)
·AspNetPager分页控件--使用方法
·ASP.net发送Email
·asp.net WebForm页面间传值方法
·.Net分页控件发布
·asp.net URL重写(URLRewriter) 之简化版
·DataTable控件的使用
·ASP.NET中文件上传下载方法集合
·asp.net2.0学习历程 菜鸟到中级程序员的飞跃
·ASP.NET购物车的实现及结算处理
·asp.net 2.0中gridview里嵌套dropdownlist
·因页面刷新而重复操作的解决方法
·asp.net报表解决方法
·Asp.Net函数集
·使用ASP.NET Atlas编写显示真实进度的ProgressBar(进度条)控件
·ASP.NET 中执行 URL 重写

因页面刷新而重复操作的解决方法

日期:2007年10月18日 作者: 查看:[大字体 中字体 小字体]


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

6 static Hashtable historyRequest = null;
7
8 /**////
9 /// 请求路径
10 ///

11 private string RequestPath
12 {
13 get
14 {
15 return HttpContext.Current.Request.Path;
16 }
17 }
18
19 IHttpModule 成员#region IHttpModule 成员
20
21 public void Dispose()
22 {
23 //throw new Exception("The method or operation is not implemented.");
24 }
25
26 public void Init(HttpApplication context)
27 {
28 if (historyRequest == null)
29 {
30 historyRequest = new Hashtable();
31 }
32
33 context.BeginRequest += delegate(object sender, EventArgs e)
34 {
35 int lastTicket = GetLastTicket();
36 int currentTicket = GetCurrentTicket(lastTicket);
37
38 // 比较当前标号和上一个的标号,判断页面请求是否来源于刷新操作
39 // 当前标号大于上一个标号 或初次请求都属于新的页面
40 if (currentTicket > lastTicket    (lastTicket == currentTicket && currentTicket == 0))
41 {
42 // 标记并保存页面请求是否来源于刷新的bool值
43 HttpContext.Current.Items[RequestPath + "_IsRefreshed"] = false;
44 historyRequest[RequestPath] = currentTicket;
45 }
46 else
47 {
48 HttpContext.Current.Items[RequestPath + "_IsRefreshed"] = true;
49 }
50 };
51 }
52
53 #endregion
54
55 /**////
56 /// 获取某页面的上一个标号
57 ///

58 ///
59 private int GetLastTicket()
60 {
61 if (!historyRequest.ContainsKey(RequestPath))
62 {
63 return 0;
64 }
65
66 return int.Parse(historyRequest[RequestPath].ToString());
67 }
68
69 /**////
70 /// 获取页面的当前标号
71 ///

72 /// 上一个标号
73 ///
74 private int GetCurrentTicket(int lastTicket)
75 {
76 int ticket;
77 // CurrentTicket 为页面的隐藏域的内容
78 string currentTicket = HttpContext.Current.Request["CurrentTicket"];
79 if (currentTicket == null)
80 {
81 ticket = lastTicket;
82 }
83 else
84 {
85 ticket = int.Parse(currentTicket);
86 }
87
88 // 保存页面的下一个标号
89 HttpContext.Current.Items[RequestPath + "_NextTicket"] = ticket + 1;
90 return ticket;
91 }
92 }
第二步,在web.config中配置自定义的HttpModule

[1] [2] 下一页 




上一篇:Vista中双击打不开程序的解决办法

下一篇:Win XP安装SP3后可敌过Vista吗?

因页面刷新而重复操作的解决方法 相关文章:
·《帝国时代罗马复兴》秘籍
·修复变成乱码的Word文档
·教你如何复制别人的QQ空间
·复旦附中校园网络系统规划和设计
·三大Windows系统故障恢复宝典(一)
·恢复IE为默认浏览器
·红色警戒2:尤里的复仇 超级武器人渣法 - 游戏秘籍
·起死回生 用Ghost修复无法格式化的U盘
·EXE文件打不开——恢复EXE文件关联
·Windows 98/XP双系统启动菜单修复
因页面刷新而重复操作的解决方法 相关软件:
·新概念英语复读机 V3.1
·Smart Undelete(删除文件恢复工具)v3.12
·帝国时代 罗马复兴 完美硬盘版
·复活秦殇前传
·复活-秦殇前传 简体中文版
·红色警戒2 尤里的复仇中文版
·帝国时代 罗马复兴
·红警 2尤里的复仇 新任务 丛林堡垒
· 《帝国时代》之罗马复兴试玩 经典老游戏
·生化危机 2 复刻版

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn