-
asp.net防刷新(F5) 禁止重复提交 实例(附完整源码)
实现了用户操作时 刷新导致的重复操作问题。 实现原理如下: 使用一个上下文唯一的票据号,该票据号随页面提交或回发而递增,每当用户与服务器端交互时,代码会提取上次的票据号码并与当前票据号码比较,如果当前票据大于上次的票据,则是提交或回发,否则则识别为刷新。 这种方式会用到HttpMoudel,并在其中操作Session。 使用方法如下: 1、引入dll MsdnExt 压缩包中有2.修改web.config,在 添加以下item: 其中“MsdnModule”是一个名字, “Msdn.RefreshModule”是“Msdn”下的“RefreshModule”类型,“MsdnExt”是程序集的名字 3.引入命名空间 using Msdn; 并修改页面类继承Msdn.Page 4.使用代码 代码: protected void Button1_Click(object sender, EventArgs e) { if (!IsPageRefresh) Response.Write("按钮事件"); else Response.Write("页面刷新");TrackRefreshState();} MSDNPage.cs 核心代码如下:using System;using System.Web.UI;using System.Web;using System.Text;namespace Msdn{ public class Page : System.Web.UI.Page { #region Constants // *********************************************************** // Constants public const string RefreshTicketCounter = "RefreshTicketCounter"; private const string SetFocusFunctionName = "__setFocus"; private const string SetFocusScriptName = "__inputFocusHandler"; // *********************************************************** #endregion // *********************************************************** // Ctor public Page() { m_focusedControl = ""; // Register a PreRender handler this.PreRender = new EventHandler(RefreshPage_PreRender); } // *********************************************************** // ************************************************************** // Indicates if the page is being viewed in response to F5 hit public bool IsPageRefresh { get { object o = HttpContext.Current.Items[RefreshAction.PageRefreshEntry]; if (o == null) return false; return (bool) o; } } // ************************************************************** // ************************************************************** // Increase the internal counter used to generate refresh tickets public void TrackRefreshState() { InitRefreshState(); int ticket = Convert.ToInt32(Session[RefreshTicketCounter]) 1; Session[RefreshTicketCounter] = ticket; } // ************************************************************** // ************************************************************** // Set the control with the input focus public void SetFocus(string ctlId) { m_focusedControl = ctlId; } // ************************************************************** #region Private Members // ************************************************************** // Create the hidden field to store the current request ticket private void SaveRefreshState() { int ticket = Convert.ToInt32(Session[RefreshTicketCounter]) 1; RegisterHiddenField(RefreshAction.CurrentRefreshTicketEntry, ticket.ToString()); } // ************************************************************** // ************************************************************** // Ensure that the ticket counter is initialized private void InitRefreshState() { if (Session[RefreshTicketCounter] == null) Session[RefreshTicketCounter] = 0; } // ************************************************************** // ************************************************************** // Handle the PreRender event private void RefreshPage_PreRender(object sender, EventArgs e) { SaveRefreshState(); AddSetFocusScript(); } // ************************************************************** // ************************************************************** // Add any script code required for the SetFocus feature private void AddSetFocusScript() { if (m_focusedControl == "") return; // Add the script to declare the function // (Only one form in ASP.NET pages) StringBuilder sb = new StringBuilder(""); sb.Append(""); sb.Append("function "); sb.Append(SetFocusFunctionName); sb.Append("(ctl) {"); sb.Append(" if (document.forms[0][ctl] != null)"); sb.Append(" {document.forms[0][ctl].focus();}"); sb.Append("}"); // Add the script to call the function sb.Append(SetFocusFunctionName); sb.Append("(); sb.Append(m_focusedControl); sb.Append();"); // Register the script (names are CASE-SENSITIVE) if (!IsStartupScriptRegistered(SetFocusScriptName)) RegisterStartupScript(SetFocusScriptName, sb.ToString()); } // ************************************************************** #endregion #region Private Properties // *********************************************************** // Private properties private string m_focusedControl; // *********************************************************** #endregion }}
- 2021-03-16 17:39:21下载
- 积分:1
-
winform 大文件 断点续传完整项目源码(含服务器端和客户端)
winform 大文件 断点续传完整项目源码(含服务器端和客户端)
- 2013-11-04下载
- 积分:1
-
C#实现汉字转换成拼音 实例源码
C#汉字转拼音,输入汉字,直接转换成拼音字母,详见下图
- 2013-01-21下载
- 积分:1
-
C# 线程池 实例(实现了创建、销毁、暂停线程池、恢复线程池)
从易语言转型到C#感觉C#自带的线程池不够灵活(或许是自己的技术不够),所以自己写了一个线程池工作类为了配合自己的使用习惯,有兴趣的可以下载参考代码用到的是信号处理以及队列等一些比较基础的东西,已经测试了功能基本上可用
- 2019-08-13下载
- 积分:1
-
百度编辑器(ueditor)完整实例 在asp.net 项目实现 附源码
ueditor编辑器含有如下功能: 全屏源码撤销重做无序列表有序列表取消超链接超链接清空文档全选打印查询替换预览Google地图百度地图百度应用分页图片涂鸦音乐附件截图表情视频插入Iframe模版背景日期时间图片转存水平线锚点特殊字符引用插入代码加粗斜体下划线删除线文字颜色背景颜色上标下标居左对齐居中对齐居右对齐两端对齐字母大写字母小写从左向右输从右向左输首行缩进清除格式格式刷自动排版纯文本粘贴自定义样式段落格式段前间距段后间距行间距字体字号图片默认图片居左图片居右图片居中插入表格删除表格右合并单元格下合并单元格拆分成行拆分成列拆成单元格合并单元格前插入列前插入行删除列删除行表格前插行自动聚焦工具栏浮动字数统计表情本地化自动清除自动长高元素路径图片浮层纯文本粘贴源码高亮右键菜单 而且可以自定义插件 二次开发
- 2013-04-21下载
- 积分:1
-
C# 发送带附件的邮件 支持中文(不乱码) 附完整源码 下载
C# 发送带附件的邮件 支持中文(不乱码) 附完整源码 下载
- 2013-06-21下载
- 积分:1
-
asp.net 多种语言网站 开发示例源码下载
一个网站 多种语言
- 2014-03-26下载
- 积分:1
-
c#简约浏览器,多标签网页浏览器,html网页浏览器
【实例简介】c#语言的简约浏览器,多标签网页浏览器,html网页浏览器,界面简约,符合现代审美,网页浏览很快,不卡顿,感兴趣的朋友可以下载来研究一下
- 2021-08-10 00:30:58下载
- 积分:1
-
字符串加密与解密.
C#字符串加密与解密.
- 2013-10-31下载
- 积分:1
-
C# 注册码以及注册机制 实例源码
注册码以及注册机制实例
- 2013-01-29下载
- 积分:1