基本信息
源码名称:asp.net防刷新(F5) 禁止重复提交 实例(附完整源码)
源码大小:0.03M
文件格式:.rar
开发语言:C#
更新时间:2013-04-22
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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
}
}