方法一:
using
System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class BasePage : System.Web.UI.Page
{
private readonly string REFRESH_TICKET_NAME = " __RefreshTicketArray " ;
private readonly string HIDDEN_FIELD_NAME = " __RefreshHiddenField " ;
private readonly string HIDDEN_PAGE_GUID = " __RefreshPageGuid " ;
///
/// 为True表示页面刷新,False为正常提交
///
public bool IsPageRefreshed
{
get
{
if (IsPostBack && ! CheckRefreshFlag())
{
return true ;
}
else
{
return false ;
}
}
}
///
/// 呈现前更新标识
///
///
protected override void OnPreRender(EventArgs e)
{
base .OnPreRender(e);
UpdateRefreshFlag();
}
///
/// 更新标识,正常提交都删除该次提交的时间,并生产当前新的时间
///
private void UpdateRefreshFlag()
{
#region Cookie模式
// 注册页面唯一标识并返回
string pageGuid = SetCurPageGuid();
HttpCookie cookie = GetRefreshTicket();
if (cookie.Values.Count > 0 )
{
cookie.Values.Remove(pageGuid);
}
string submitTime = DateTime.Now.ToString( " hhmmss.fffff " );
// 当前提交时间保存到隐藏域
ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME, submitTime);
cookie.Values.Add(pageGuid, submitTime);
Response.AppendCookie(cookie);
#endregion
}
///
/// 验证是否刷新
///
///
private bool CheckRefreshFlag()
{
HttpCookie cookie = GetRefreshTicket();
string pageGuid = GetCurPageGuid();
if (cookie.Values.Count > 0 )
{
bool flag;
if (cookie.Values[pageGuid] != null )
flag = cookie.Values[pageGuid].IndexOf(GetCurSubmitTime()) > - 1 ;
else
flag = true ; // 防止出现异常,总是可以提交
return flag;
}
return true ;
}
///
/// 得到已保存的提交时间,没有新建,有返回
///
///
private HttpCookie GetRefreshTicket()
{
#region Cookie模式,返回值为Cookie
HttpCookie cookie;
if (Request.Cookies[REFRESH_TICKET_NAME] == null )
{
cookie = new HttpCookie(REFRESH_TICKET_NAME);
Response.AppendCookie(cookie);
}
else
{
cookie = Request.Cookies[REFRESH_TICKET_NAME];
}
return cookie;
#endregion
}
///
/// 获取当前提交时间
///
///
private string GetCurSubmitTime()
{
string submitTime = Request.Params[HIDDEN_FIELD_NAME] == null ? "" : Request.Params[HIDDEN_FIELD_NAME].ToString();
return submitTime;
}
///
/// 设置页面唯一标识,通过Guid标识来区分每个页面自己的提交时间
///
private string SetCurPageGuid()
{
string guid;
if ( ! IsPostBack)
{
if (Request.Params[HIDDEN_PAGE_GUID] == null )
{
guid = System.Guid.NewGuid().ToString();
}
else
guid = GetCurPageGuid();
}
else
{
guid = GetCurPageGuid();
}
ClientScript.RegisterHiddenField(HIDDEN_PAGE_GUID, guid);
return guid;
}
///
/// 得到当前页面的唯一标识
///
///
private string GetCurPageGuid()
{
string pageGuid = Request.Params[HIDDEN_PAGE_GUID] == null ? " none " : Request.Params[HIDDEN_PAGE_GUID].ToString();
return pageGuid;
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class BasePage : System.Web.UI.Page
{
private readonly string REFRESH_TICKET_NAME = " __RefreshTicketArray " ;
private readonly string HIDDEN_FIELD_NAME = " __RefreshHiddenField " ;
private readonly string HIDDEN_PAGE_GUID = " __RefreshPageGuid " ;
///
/// 为True表示页面刷新,False为正常提交
///
public bool IsPageRefreshed
{
get
{
if (IsPostBack && ! CheckRefreshFlag())
{
return true ;
}
else
{
return false ;
}
}
}
///
/// 呈现前更新标识
///
///
protected override void OnPreRender(EventArgs e)
{
base .OnPreRender(e);
UpdateRefreshFlag();
}
///
/// 更新标识,正常提交都删除该次提交的时间,并生产当前新的时间
///
private void UpdateRefreshFlag()
{
#region Cookie模式
// 注册页面唯一标识并返回
string pageGuid = SetCurPageGuid();
HttpCookie cookie = GetRefreshTicket();
if (cookie.Values.Count > 0 )
{
cookie.Values.Remove(pageGuid);
}
string submitTime = DateTime.Now.ToString( " hhmmss.fffff " );
// 当前提交时间保存到隐藏域
ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME, submitTime);
cookie.Values.Add(pageGuid, submitTime);
Response.AppendCookie(cookie);
#endregion
}
///
/// 验证是否刷新
///
///
private bool CheckRefreshFlag()
{
HttpCookie cookie = GetRefreshTicket();
string pageGuid = GetCurPageGuid();
if (cookie.Values.Count > 0 )
{
bool flag;
if (cookie.Values[pageGuid] != null )
flag = cookie.Values[pageGuid].IndexOf(GetCurSubmitTime()) > - 1 ;
else
flag = true ; // 防止出现异常,总是可以提交
return flag;
}
return true ;
}
///
/// 得到已保存的提交时间,没有新建,有返回
///
///
private HttpCookie GetRefreshTicket()
{
#region Cookie模式,返回值为Cookie
HttpCookie cookie;
if (Request.Cookies[REFRESH_TICKET_NAME] == null )
{
cookie = new HttpCookie(REFRESH_TICKET_NAME);
Response.AppendCookie(cookie);
}
else
{
cookie = Request.Cookies[REFRESH_TICKET_NAME];
}
return cookie;
#endregion
}
///
/// 获取当前提交时间
///
///
private string GetCurSubmitTime()
{
string submitTime = Request.Params[HIDDEN_FIELD_NAME] == null ? "" : Request.Params[HIDDEN_FIELD_NAME].ToString();
return submitTime;
}
///
/// 设置页面唯一标识,通过Guid标识来区分每个页面自己的提交时间
///
private string SetCurPageGuid()
{
string guid;
if ( ! IsPostBack)
{
if (Request.Params[HIDDEN_PAGE_GUID] == null )
{
guid = System.Guid.NewGuid().ToString();
}
else
guid = GetCurPageGuid();
}
else
{
guid = GetCurPageGuid();
}
ClientScript.RegisterHiddenField(HIDDEN_PAGE_GUID, guid);
return guid;
}
///
/// 得到当前页面的唯一标识
///
///
private string GetCurPageGuid()
{
string pageGuid = Request.Params[HIDDEN_PAGE_GUID] == null ? " none " : Request.Params[HIDDEN_PAGE_GUID].ToString();
return pageGuid;
}
}
方法二:
using
System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
public class BasePage : System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region IsRefreshed
///
/// IsRefreshed
///
public bool IsRefreshed
{
get
{
string requestPath = HttpContext.Current.Request.Path;
return ( bool )HttpContext.Current.Items[requestPath + " _IsRefreshed " ];
}
}
#endregion
///
/// 重写OnPreRenderComplete,生成隐藏域CurrentTicket
///
///
protected override void OnPreRenderComplete(EventArgs e)
{
base .OnPreRenderComplete(e);
string requestPath = HttpContext.Current.Request.Path;
int ticket = int .Parse(HttpContext.Current.Items[requestPath + " _NextTicket " ].ToString());
ClientScript.RegisterHiddenField( " CurrentTicket " , ticket.ToString());
}
}
///
/// NoRepeatOperModule 的摘要描述
///
public class NoRepeatOperModule : IHttpModule
{
public NoRepeatOperModule()
{
//
// TODO:
//
}
///
/// 保存访问的页面记录,以页面路径为key, 标号为value
///
static Hashtable historyRequest = null ;
///
/// 请求路径
///
private string RequestPath
{
get
{
return HttpContext.Current.Request.Path;
}
}
#region IHttpModule 成员
public void Dispose()
{
// throw new Exception("The method or operation is not implemented.");
}
public void Init(HttpApplication context)
{
if (historyRequest == null )
{
historyRequest = new Hashtable();
}
context.BeginRequest += delegate ( object sender, EventArgs e)
{
int lastTicket = GetLastTicket();
int currentTicket = GetCurrentTicket(lastTicket);
// 比较当前标号和上一个的标号,判断页面请求是否来源于刷新操作
// 当前标号大于上一个标号 或初次请求都属于新的页面
if (currentTicket > lastTicket || (lastTicket == currentTicket && currentTicket == 0 ))
{
// 标记并保存页面请求是否来源于刷新的bool值
HttpContext.Current.Items[RequestPath + " _IsRefreshed " ] = false ;
historyRequest[RequestPath] = currentTicket;
}
else
{
HttpContext.Current.Items[RequestPath + " _IsRefreshed " ] = true ;
}
};
}
#endregion
/**/
///
/// 获取某页面的上一个标号
///
///
private int GetLastTicket()
{
if ( ! historyRequest.ContainsKey(RequestPath))
{
return 0 ;
}
return int .Parse(historyRequest[RequestPath].ToString());
}
/**/
///
/// 获取页面的当前标号
///
/// 上一个标号
///
private int GetCurrentTicket( int lastTicket)
{
int ticket;
// CurrentTicket 为页面的隐藏域的内容
string currentTicket = HttpContext.Current.Request[ " CurrentTicket " ];
if (currentTicket == null )
{
ticket = lastTicket;
}
else
{
ticket = int .Parse(currentTicket);
}
// 保存页面的下一个标号
HttpContext.Current.Items[RequestPath + " _NextTicket " ] = ticket + 1 ;
return ticket;
}
}
// webconfig配置
//
//
//
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
public class BasePage : System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region IsRefreshed
///
/// IsRefreshed
///
public bool IsRefreshed
{
get
{
string requestPath = HttpContext.Current.Request.Path;
return ( bool )HttpContext.Current.Items[requestPath + " _IsRefreshed " ];
}
}
#endregion
///
/// 重写OnPreRenderComplete,生成隐藏域CurrentTicket
///
///
protected override void OnPreRenderComplete(EventArgs e)
{
base .OnPreRenderComplete(e);
string requestPath = HttpContext.Current.Request.Path;
int ticket = int .Parse(HttpContext.Current.Items[requestPath + " _NextTicket " ].ToString());
ClientScript.RegisterHiddenField( " CurrentTicket " , ticket.ToString());
}
}
///
/// NoRepeatOperModule 的摘要描述
///
public class NoRepeatOperModule : IHttpModule
{
public NoRepeatOperModule()
{
//
// TODO:
//
}
///
/// 保存访问的页面记录,以页面路径为key, 标号为value
///
static Hashtable historyRequest = null ;
///
/// 请求路径
///
private string RequestPath
{
get
{
return HttpContext.Current.Request.Path;
}
}
#region IHttpModule 成员
public void Dispose()
{
// throw new Exception("The method or operation is not implemented.");
}
public void Init(HttpApplication context)
{
if (historyRequest == null )
{
historyRequest = new Hashtable();
}
context.BeginRequest += delegate ( object sender, EventArgs e)
{
int lastTicket = GetLastTicket();
int currentTicket = GetCurrentTicket(lastTicket);
// 比较当前标号和上一个的标号,判断页面请求是否来源于刷新操作
// 当前标号大于上一个标号 或初次请求都属于新的页面
if (currentTicket > lastTicket || (lastTicket == currentTicket && currentTicket == 0 ))
{
// 标记并保存页面请求是否来源于刷新的bool值
HttpContext.Current.Items[RequestPath + " _IsRefreshed " ] = false ;
historyRequest[RequestPath] = currentTicket;
}
else
{
HttpContext.Current.Items[RequestPath + " _IsRefreshed " ] = true ;
}
};
}
#endregion
/**/
///
/// 获取某页面的上一个标号
///
///
private int GetLastTicket()
{
if ( ! historyRequest.ContainsKey(RequestPath))
{
return 0 ;
}
return int .Parse(historyRequest[RequestPath].ToString());
}
/**/
///
/// 获取页面的当前标号
///
/// 上一个标号
///
private int GetCurrentTicket( int lastTicket)
{
int ticket;
// CurrentTicket 为页面的隐藏域的内容
string currentTicket = HttpContext.Current.Request[ " CurrentTicket " ];
if (currentTicket == null )
{
ticket = lastTicket;
}
else
{
ticket = int .Parse(currentTicket);
}
// 保存页面的下一个标号
HttpContext.Current.Items[RequestPath + " _NextTicket " ] = ticket + 1 ;
return ticket;
}
}
// webconfig配置
//
//