在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例常用C#方法 → asp.net防刷新(F5) 禁止重复提交 实例(附完整源码)

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

常用C#方法

下载此实例
  • 开发语言:C#
  • 实例大小:0.03M
  • 下载次数:25
  • 浏览次数:1134
  • 发布时间:2013-04-22
  • 实例类别:常用C#方法
  • 发 布 人:crazycode
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 刷新

实例介绍

【实例简介】实现了用户操作时 刷新导致的重复操作问题。

实现原理如下:

 

使用一个上下文唯一的票据号,该票据号随页面提交或回发而递增,每当用户与服务器端交互时,代码会提取上次的票据号码并与当前票据号码比较,如果当前票据大于上次的票据,则是提交或回发,否则则识别为刷新。

    这种方式会用到HttpMoudel,并在其中操作Session。

 

使用方法如下:

 

1、引入dll MsdnExt 压缩包中有
2.修改web.config,在<httpModules> </httpModules>添加以下item:

       <add name="MsdnModule" type="Msdn.RefreshModule, MsdnExt"/>

       其中“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("<script language=javascript>");
			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("');<");
			sb.Append("/");   // break like this to avoid misunderstandings...
			sb.Append("script>");

			// 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
	}
}

 

标签: 刷新

实例下载地址

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

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警