其中“MsdnModule”是一个名字,“Msdn.RefreshModule”是“Msdn”下的“RefreshModule”类型,“MsdnExt”是程序集的名字3.引入命名空间usingMsdn;并修改页面类继承Msdn.Page4.使用代码 代码: protectedvoidButton1_Click(objectsender,EventArgse){if(!IsPageRefresh)Response.Write("按钮事件");elseResponse.Write("页面刷新");TrackRefreshState();}MSDNPage.cs核心代码如下:usingSystem;usingSystem.Web.UI;usingSystem.Web;usingSystem.Text;namespaceMsdn{publicclassPage:System.Web.UI.Page{#regionConstants//***********************************************************//ConstantspublicconststringRefreshTicketCounter="RefreshTicketCounter";privateconststringSetFocusFunctionName="__setFocus";privateconststringSetFocusScriptName="__inputFocusHandler";//***********************************************************#endregion//***********************************************************//CtorpublicPage(){m_focusedControl="";//RegisteraPreRenderhandlerthis.PreRender=newEventHandler(RefreshPage_PreRender);}//***********************************************************//**************************************************************//IndicatesifthepageisbeingviewedinresponsetoF5hitpublicboolIsPageRefresh{get{objecto=HttpContext.Current.Items[RefreshAction.PageRefreshEntry];if(o==null)returnfalse;return(bool)o;}}//**************************************************************//**************************************************************//IncreasetheinternalcounterusedtogeneraterefreshticketspublicvoidTrackRefreshState(){InitRefreshState();intticket=Convert.ToInt32(Session[RefreshTicketCounter])1;Session[RefreshTicketCounter]=ticket;}//**************************************************************//**************************************************************//SetthecontrolwiththeinputfocuspublicvoidSetFocus(stringctlId){m_focusedControl=ctlId;}//**************************************************************#regionPrivateMembers//**************************************************************//CreatethehiddenfieldtostorethecurrentrequestticketprivatevoidSaveRefreshState(){intticket=Convert.ToInt32(Session[RefreshTicketCounter])1;RegisterHiddenField(RefreshAction.CurrentRefreshTicketEntry,ticket.ToString());}//**************************************************************//**************************************************************//EnsurethattheticketcounterisinitializedprivatevoidInitRefreshState(){if(Session[RefreshTicketCounter]==null)Session[RefreshTicketCounter]=0;}//**************************************************************//**************************************************************//HandlethePreRendereventprivatevoidRefreshPage_PreRender(objectsender,EventArgse){SaveRefreshState();AddSetFocusScript();}//**************************************************************//**************************************************************//AddanyscriptcoderequiredfortheSetFocusfeatureprivatevoidAddSetFocusScript(){if(m_focusedControl=="")return;//Addthescripttodeclarethefunction//(OnlyoneforminASP.NETpages)StringBuildersb=newStringBuilder("");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("}");//Addthescripttocallthefunctionsb.Append(SetFocusFunctionName);sb.Append("();sb.Append(m_focusedControl);sb.Append();<");sb.Append("/");//breaklikethistoavoidmisunderstandings...sb.Append("script>");//Registerthescript(namesareCASE-SENSITIVE)if(!IsStartupScriptRegistered(SetFocusScriptName))RegisterStartupScript(SetFocusScriptName,sb.ToString());}//**************************************************************#endregion#regionPrivateProperties//***********************************************************//Privatepropertiesprivatestringm_focusedControl;//***********************************************************#endregion}} -IMDN开发者社群-imdn.cn">       其中“MsdnModule”是一个名字,“Msdn.RefreshModule”是“Msdn”下的“RefreshModule”类型,“MsdnExt”是程序集的名字3.引入命名空间usingMsdn;并修改页面类继承Msdn.Page4.使用代码 代码: protectedvoidButton1_Click(objectsender,EventArgse){if(!IsPageRefresh)Response.Write("按钮事件");elseResponse.Write("页面刷新");TrackRefreshState();}MSDNPage.cs核心代码如下:usingSystem;usingSystem.Web.UI;usingSystem.Web;usingSystem.Text;namespaceMsdn{publicclassPage:System.Web.UI.Page{#regionConstants//***********************************************************//ConstantspublicconststringRefreshTicketCounter="RefreshTicketCounter";privateconststringSetFocusFunctionName="__setFocus";privateconststringSetFocusScriptName="__inputFocusHandler";//***********************************************************#endregion//***********************************************************//CtorpublicPage(){m_focusedControl="";//RegisteraPreRenderhandlerthis.PreRender=newEventHandler(RefreshPage_PreRender);}//***********************************************************//**************************************************************//IndicatesifthepageisbeingviewedinresponsetoF5hitpublicboolIsPageRefresh{get{objecto=HttpContext.Current.Items[RefreshAction.PageRefreshEntry];if(o==null)returnfalse;return(bool)o;}}//**************************************************************//**************************************************************//IncreasetheinternalcounterusedtogeneraterefreshticketspublicvoidTrackRefreshState(){InitRefreshState();intticket=Convert.ToInt32(Session[RefreshTicketCounter])1;Session[RefreshTicketCounter]=ticket;}//**************************************************************//**************************************************************//SetthecontrolwiththeinputfocuspublicvoidSetFocus(stringctlId){m_focusedControl=ctlId;}//**************************************************************#regionPrivateMembers//**************************************************************//CreatethehiddenfieldtostorethecurrentrequestticketprivatevoidSaveRefreshState(){intticket=Convert.ToInt32(Session[RefreshTicketCounter])1;RegisterHiddenField(RefreshAction.CurrentRefreshTicketEntry,ticket.ToString());}//**************************************************************//**************************************************************//EnsurethattheticketcounterisinitializedprivatevoidInitRefreshState(){if(Session[RefreshTicketCounter]==null)Session[RefreshTicketCounter]=0;}//**************************************************************//**************************************************************//HandlethePreRendereventprivatevoidRefreshPage_PreRender(objectsender,EventArgse){SaveRefreshState();AddSetFocusScript();}//**************************************************************//**************************************************************//AddanyscriptcoderequiredfortheSetFocusfeatureprivatevoidAddSetFocusScript(){if(m_focusedControl=="")return;//Addthescripttodeclarethefunction//(OnlyoneforminASP.NETpages)StringBuildersb=newStringBuilder("");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("}");//Addthescripttocallthefunctionsb.Append(SetFocusFunctionName);sb.Append("();sb.Append(m_focusedControl);sb.Append();<");sb.Append("/");//breaklikethistoavoidmisunderstandings...sb.Append("script>");//Registerthescript(namesareCASE-SENSITIVE)if(!IsStartupScriptRegistered(SetFocusScriptName))RegisterStartupScript(SetFocusScriptName,sb.ToString());}//**************************************************************#endregion#regionPrivateProperties//***********************************************************//Privatepropertiesprivatestringm_focusedControl;//***********************************************************#endregion}}  - IMDN开发者社群-imdn.cn">
登录
首页 » C# » asp.net防刷新(F5) 禁止重复提交 实例(附完整源码)

asp.net防刷新(F5) 禁止重复提交 实例(附完整源码)

于 2021-03-16 发布
0 83
下载积分: 1 下载次数: 0

代码说明:

实现了用户操作时 刷新导致的重复操作问题。 实现原理如下:   使用一个上下文唯一的票据号,该票据号随页面提交或回发而递增,每当用户与服务器端交互时,代码会提取上次的票据号码并与当前票据号码比较,如果当前票据大于上次的票据,则是提交或回发,否则则识别为刷新。     这种方式会用到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 }}  

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • MVC实现二级域名泛解析,并实现了LinkExtensions类的ActionLink的不同重载
    用Asp.Net MVC实现泛域名解析 实现了如下功能:www.{language}-{culture}.example.comwww.{controller}.example.com/{action}www.{clientname}.example.com
    2012-12-16下载
    积分:1
  • asp.net mvc 多语言网站框架 示例源码下载(含完整数据库)
    asp.net mvc 多语言网站框架 示例源码下载(含完整数据库)
    2014-03-01下载
    积分:1
  • C# 注册码以及注册机制 实例源码
    注册码以及注册机制实例
    2013-01-29下载
    积分:1
  • C# 键盘记录Demo 实例源码下载(钩子)
    打开该实例以后,所有键盘的操作 均被写入 E盘的 system.txt文件下
    2015-01-29下载
    积分:1
  • Wpf示例 WebSocket图文传输基础(初级)
    示例使用方法在word文档内查看。要是看明白了,会发现这类东西编写其实很简单。示例及文档说明了WebSocket的基本使用方法,介绍了传输文字、图像、文件传输的基本方法。示例仿照微信的显示样式传递图文。可以适用于Socket、WebService等连接方式,只要包括发送用户数据功能、判断用户离线功能就可以。只是将Socket_Packet类进行传递。关于WebSocket使用的其他说明可参见:https://github.com/sta/websocket-sharp。示例界面只是简单贴了几张图,没做设计,所以界面部分无需参考。文章对照源代码进行理解,学习时间不长,难免有错,自行纠正,交流:QQ: 3532927017
    2020-06-20下载
    积分:1
  • C#提取某个目录下Word文档,并分析统计文档页数实例代码
    C#提取目录中的Word文档,有提取、统计页数功能
    2013-01-21下载
    积分:1
  • jquery post json数据 例子源码下载
    jquery post json数据 例子源码下载
    2014-11-11下载
    积分:1
  • Asp.Net无刷新上传并裁剪头像(Jquery插件 Uploadify实现) 附完整源码
    用jquery插件 Uploadify实现无刷新上传头像,并可裁剪图片大小, 官方网站详见:http://www.uploadify.com/   常用方法有: 名称 介绍 类型 Uploadify常用属性 uploader uploadify的swf文件的路径 string cancelImg 取消按钮图片路径 string folder 上传文件夹路径 string multi 是否多文件上传 boolean script 上传文件处理代码的文件路径 json scriptData 提交到script对应路径文件的参数 类型 method 提交scriptData的方式(get/post) string fileExt 支持上传文件类型(格式:*.jpg;*.png) string fileDesc 提示于点击上传弹出选择文件框文件类型(自定义) string sizeLimit 上传大小限制(byte为单位) integer auto 是否选择文件后自动上传 boolean Uploadify常用事件 onAllComplete 上传完成后响应 function onCancel 取消时响应 function Uploadify常用方法 .uploadify() 初始化uploadify上传   .uploadifyUpload() 触发上传   .uploadifySettings() 更新uploadify的属性      
    2013-04-09下载
    积分:1
  • C#实现汉字转换成拼音 实例源码
    C#汉字转拼音,输入汉字,直接转换成拼音字母,详见下图
    2013-01-21下载
    积分:1
  • C#版本身份证验证器
    身份证验证器,可以得到该身份证的性别、地区、生日等信息
    2013-01-19下载
    积分:1
  • 696518资源总数
  • 104269会员总数
  • 31今日下载