- 浏览: 252624 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
u010181690:
怎么我的不管事呢
JSEnhancements for vs2012 -
sunqing0316:
public static DateTime? GetData ...
详解System.Nullable<值类型> -
sunqing0316:
请问public static DateTime? GetDa ...
详解System.Nullable<值类型> -
3eirc3:
不错,下载下来试试,原来用vs2010时的那个工具和现在这个不 ...
JSEnhancements for vs2012 -
3eirc3:
[url][b][i][u]引用[list]
[*][img] ...
JSEnhancements for vs2012
http://www.cnblogs.com/madehua/archive/2009/03/23/1420052.html
Code
public class RefreshServe : System.Web.UI.Page
{
private static ILog log = LogManager.GetLogger(typeof(RefreshServe));
private readonly string REFRESH_TICKET_NAME = "__RefreshTicketArray";
private readonly string HIDDEN_FIELD_NAME = "__RefreshHiddenField";
private readonly string HIDDEN_PAGE_GUID = "__RefreshPageGuid";
/// <summary>
/// 为True表示页面刷新,False为正常提交
/// </summary>
public bool IsPageRefreshed
{
get
{
if (IsPostBack && !CheckRefreshFlag())
{
log.Debug("刷新了页面");
return true;
}
else
{
log.Debug("正常提交");
return false;
}
}
}
/// <summary>
/// 呈现前更新标识
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
{
log.Debug("执行OnPreRender");
base.OnPreRender(e);
UpdateRefreshFlag();
}
/// <summary>
/// 更新标识,正常提交都删除该次提交的时间,并生产当前新的时间
/// </summary>
private void UpdateRefreshFlag()
{
#region Cookie模式
//注册页面唯一标识并返回
string pageGuid = SetCurPageGuid();
HttpCookie cookie = GetRefreshTicket();
if (cookie.Values.Count > 0)
{
cookie.Values.Remove(pageGuid);
log.Debug("当前清除的cookie变是:" + pageGuid);
}
string submitTime = DateTime.Now.ToString("hhmmss.fffff");
//当前提交时间保存到隐藏域
ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME, submitTime);
log.Debug("即将要新增的时间:submitTime:" + submitTime + " Guid:" + pageGuid.ToString());
cookie.Values.Add(pageGuid, submitTime);
log.Debug("UpdateRefreshFlag中当前Cookie中存在的记录数为:" + cookie.Values.Count);
for (int i = 0; i < cookie.Values.Count; i++)
log.Info("cookie[" + cookie.Values.GetKey(i) + "]:" + cookie.Values[i]);
Response.AppendCookie(cookie);
#endregion
}
/// <summary>
/// 验证是否刷新
/// </summary>
/// <returns></returns>
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;//防止出现异常,总是可以提交
if (flag)
log.Debug("提交时间存在,可以提交");
else
log.Debug("无效的提交时间");
return flag;
}
return true;
}
/// <summary>
/// 得到已保存的提交时间,没有新建,有返回
/// </summary>
/// <returns></returns>
private HttpCookie GetRefreshTicket()
{
#region Cookie模式,返回值为Cookie
HttpCookie cookie;
if (Request.Cookies[REFRESH_TICKET_NAME] == null)
{
cookie = new HttpCookie(REFRESH_TICKET_NAME);
Response.AppendCookie(cookie);
log.Debug("Cookie不存在,初始化");
}
else
{
cookie = Request.Cookies[REFRESH_TICKET_NAME];
log.Debug("读取已存在的Cookie,当前Cookie中存在的记录数为:" + cookie.Values.Count + "具体有如下几条:");
for (int i = 0; i < cookie.Values.Count; i++)
log.Info("cookie[" + cookie.Values.GetKey(i) + "]:" + cookie.Values[i]);
}
return cookie;
#endregion
}
/// <summary>
/// 获取当前提交时间
/// </summary>
/// <returns></returns>
private string GetCurSubmitTime()
{
string submitTime = Request.Params[HIDDEN_FIELD_NAME] == null ? "" : Request.Params[HIDDEN_FIELD_NAME].ToString();
log.Debug("执行GetCurSubmitTime:submitTime为:" + submitTime);
return submitTime;
}
/// <summary>
/// 设置页面唯一标识,通过Guid标识来区分每个页面自己的提交时间
/// </summary>
private string SetCurPageGuid()
{
string guid;
if (!IsPostBack)
{
if (Request.Params[HIDDEN_PAGE_GUID] == null)
{
guid = System.Guid.NewGuid().ToString();
log.Debug("SetCurPageGuid注册了一个新的标识:" + guid);
}
else
guid = GetCurPageGuid();
}
else
{
guid = GetCurPageGuid();
}
ClientScript.RegisterHiddenField(HIDDEN_PAGE_GUID, guid);
return guid;
}
/// <summary>
/// 得到当前页面的唯一标识
/// </summary>
/// <returns></returns>
private string GetCurPageGuid()
{
string pageGuid = Request.Params[HIDDEN_PAGE_GUID] == null ? "none" : Request.Params[HIDDEN_PAGE_GUID].ToString();
log.Debug("执行GetCurPageGuid()后Page_GUID为:" + pageGuid);
return pageGuid;
}
}
999999999999999999999999999999999999999999999999
需要刷新判断功能时新页面只需继承该类就可,通过引用属性IsPageRefreshed识别"为真表示刷新,假则是正常提交",将数据库的操作写在
if(!IsPageRefreshed)
{
数据库操作
}
Code
public class RefreshServe : System.Web.UI.Page
{
private static ILog log = LogManager.GetLogger(typeof(RefreshServe));
private readonly string REFRESH_TICKET_NAME = "__RefreshTicketArray";
private readonly string HIDDEN_FIELD_NAME = "__RefreshHiddenField";
private readonly string HIDDEN_PAGE_GUID = "__RefreshPageGuid";
/// <summary>
/// 为True表示页面刷新,False为正常提交
/// </summary>
public bool IsPageRefreshed
{
get
{
if (IsPostBack && !CheckRefreshFlag())
{
log.Debug("刷新了页面");
return true;
}
else
{
log.Debug("正常提交");
return false;
}
}
}
/// <summary>
/// 呈现前更新标识
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
{
log.Debug("执行OnPreRender");
base.OnPreRender(e);
UpdateRefreshFlag();
}
/// <summary>
/// 更新标识,正常提交都删除该次提交的时间,并生产当前新的时间
/// </summary>
private void UpdateRefreshFlag()
{
#region Cookie模式
//注册页面唯一标识并返回
string pageGuid = SetCurPageGuid();
HttpCookie cookie = GetRefreshTicket();
if (cookie.Values.Count > 0)
{
cookie.Values.Remove(pageGuid);
log.Debug("当前清除的cookie变是:" + pageGuid);
}
string submitTime = DateTime.Now.ToString("hhmmss.fffff");
//当前提交时间保存到隐藏域
ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME, submitTime);
log.Debug("即将要新增的时间:submitTime:" + submitTime + " Guid:" + pageGuid.ToString());
cookie.Values.Add(pageGuid, submitTime);
log.Debug("UpdateRefreshFlag中当前Cookie中存在的记录数为:" + cookie.Values.Count);
for (int i = 0; i < cookie.Values.Count; i++)
log.Info("cookie[" + cookie.Values.GetKey(i) + "]:" + cookie.Values[i]);
Response.AppendCookie(cookie);
#endregion
}
/// <summary>
/// 验证是否刷新
/// </summary>
/// <returns></returns>
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;//防止出现异常,总是可以提交
if (flag)
log.Debug("提交时间存在,可以提交");
else
log.Debug("无效的提交时间");
return flag;
}
return true;
}
/// <summary>
/// 得到已保存的提交时间,没有新建,有返回
/// </summary>
/// <returns></returns>
private HttpCookie GetRefreshTicket()
{
#region Cookie模式,返回值为Cookie
HttpCookie cookie;
if (Request.Cookies[REFRESH_TICKET_NAME] == null)
{
cookie = new HttpCookie(REFRESH_TICKET_NAME);
Response.AppendCookie(cookie);
log.Debug("Cookie不存在,初始化");
}
else
{
cookie = Request.Cookies[REFRESH_TICKET_NAME];
log.Debug("读取已存在的Cookie,当前Cookie中存在的记录数为:" + cookie.Values.Count + "具体有如下几条:");
for (int i = 0; i < cookie.Values.Count; i++)
log.Info("cookie[" + cookie.Values.GetKey(i) + "]:" + cookie.Values[i]);
}
return cookie;
#endregion
}
/// <summary>
/// 获取当前提交时间
/// </summary>
/// <returns></returns>
private string GetCurSubmitTime()
{
string submitTime = Request.Params[HIDDEN_FIELD_NAME] == null ? "" : Request.Params[HIDDEN_FIELD_NAME].ToString();
log.Debug("执行GetCurSubmitTime:submitTime为:" + submitTime);
return submitTime;
}
/// <summary>
/// 设置页面唯一标识,通过Guid标识来区分每个页面自己的提交时间
/// </summary>
private string SetCurPageGuid()
{
string guid;
if (!IsPostBack)
{
if (Request.Params[HIDDEN_PAGE_GUID] == null)
{
guid = System.Guid.NewGuid().ToString();
log.Debug("SetCurPageGuid注册了一个新的标识:" + guid);
}
else
guid = GetCurPageGuid();
}
else
{
guid = GetCurPageGuid();
}
ClientScript.RegisterHiddenField(HIDDEN_PAGE_GUID, guid);
return guid;
}
/// <summary>
/// 得到当前页面的唯一标识
/// </summary>
/// <returns></returns>
private string GetCurPageGuid()
{
string pageGuid = Request.Params[HIDDEN_PAGE_GUID] == null ? "none" : Request.Params[HIDDEN_PAGE_GUID].ToString();
log.Debug("执行GetCurPageGuid()后Page_GUID为:" + pageGuid);
return pageGuid;
}
}
999999999999999999999999999999999999999999999999
需要刷新判断功能时新页面只需继承该类就可,通过引用属性IsPageRefreshed识别"为真表示刷新,假则是正常提交",将数据库的操作写在
if(!IsPageRefreshed)
{
数据库操作
}
发表评论
-
SQL Server附加数据库提示5120错误解决
2014-05-15 15:16 679 -
电话验证
2014-04-09 10:47 487private const string REG_M ... -
.net面试题
2014-04-02 11:15 817相册 广场 ... -
.net面试题
2014-04-02 11:12 1163登录 首页 专栏 专 ... -
new Date(myDateString)在IE中输出NaN,在火狐和谷歌浏览器中正常
2014-04-01 11:18 953今天在工作中遇到这样一个问题:使用jquery ui的date ... -
日历查看课程(支持从指定日期开始显示日历)
2014-03-31 09:28 653日历查看课程(支持从指定日期开始显示日历),增强浏览器兼容性, ... -
javascript之数组操作
2014-03-18 14:49 2981、数组的创建 var arrayO ... -
一個結合where、group、orderby的linq語法
2014-03-11 18:09 810這個linq語法是之前在寫winform程式時,將DataSe ... -
比较C#中的readonly与const
2014-03-07 10:22 453比较C#中的readonly与const ... -
string和stringBuilder区别
2014-03-07 10:15 644C# String 对象是不可改变的。每次使用 System ... -
SCOPE_IDENTITY和@@IDENTITY的用法
2013-12-07 16:39 1838SCOPE_IDENTITY和@@IDENTITY的 ... -
C#.net cookie、session实现自动登陆
2013-11-08 13:35 1907C#.net cookie、session实现 ... -
多条件查询的存储过程的写法
2013-11-04 15:07 504USE [ESD] GO /****** Object: S ... -
多条件查询的存储过程的写法
2013-11-04 15:06 537USE [ESD] GO /****** Object: S ... -
linq left join
2013-11-04 15:04 724linq left join var list = fro ... -
HttpHandler和HttpModule
2013-11-04 15:03 625HttpHandler和HttpModule ... -
如何过滤一个集合
2013-10-10 18:45 658List<Lenovo.SDI.ESD.Entiti ... -
DropdownList动态控制显示的值
2013-10-10 18:43 626DropdownList.Items.Insert(0, ne ... -
asp.net的<% %>总结
2013-08-30 17:01 726asp.net的<% %>总结 ... -
trim
2013-08-30 14:04 394string auditorsName.Trim(','); ...
相关推荐
### ASP.NET中防止刷新页面造成表单重复提交 在Web应用程序开发中,特别是在使用ASP.NET进行网站构建时,一个常见的问题是表单重复提交。这通常发生在用户通过按下浏览器的F5键来刷新页面的情况下,此时之前的表单...
然而,这种方法并不能完全防止所有情况下的重复提交,因为某些用户可能使用浏览器的刷新功能或者在网络延迟后多次点击。 ASP.NET MVC框架提供了一些内置机制来处理此问题。例如,可以使用`AntiForgeryToken`辅助...
在ASP.NET web应用程序中,"刷新重复提交"是一个常见的问题,它发生在用户点击浏览器...总的来说,理解和掌握防止ASP.NET刷新重复提交的方法对于构建健壮的Web应用至关重要,因为它直接关系到数据的安全性和用户体验。
在VB.NET中,防止网页重复提交是一个重要的议题,特别是在处理敏感数据或执行关键操作时,重复提交可能导致数据不一致或系统资源浪费。本教程将详细解释如何通过多种方法实现这一功能,结合提供的源码,我们可以深入...
在ASP.NET web应用程序...综上所述,防止表单重复提交是保证ASP.NET应用数据完整性的重要一环。通过综合运用服务器端和客户端的验证机制,以及区分新打开页面和刷新页面的策略,我们可以构建更健壮、更安全的Web应用。
在***应用开发中,防止用户在表单提交后通过刷新页面造成数据的重复提交是一个常见的需求,特别是当用户通过浏览器工具栏的刷新按钮触发页面刷新时。尽管可以通过JavaScript禁用F5快捷键来防止一部分重复提交,但这...
为Button或其他控件加上下面两个属性即可1.UseSubmitBehavior=”false”使用服务器端提交机制,即执行OnClick事件。 2.OnClientClick客户端点击按钮后,设置控件为不可用,控件文本显示处理中…,待服务器端执行完...
以下将详细探讨几种在ASP.NET中防止页面刷新导致重复提交的方法: ### 1. 使用转向页面语句 这是最直接且广泛使用的方法,它可以通过服务器端或客户端脚本来实现。 #### 服务器端转向 使用`Response.Redirect...
### 防止页面的重复提交和刷新 #### 一、引言 在现代Web应用开发过程中,确保数据完整性与用户体验至关重要。其中,“防止页面的重复提交和刷新”这一问题尤为关键,它不仅关系到系统的稳定性,还直接影响用户体验...
为了防止页面刷新之后,用户再次点击按钮造成重复提交,页面刷新前应当将重要状态保存至服务器端或通过其他方式维持状态,例如使用服务器端的Session变量或者数据库记录,保证即使页面刷新,状态也能被正确地维护。...
本方案通过使用`Session`对象和随机字符串来有效防止用户重复提交数据,解决了ASP.NET页面刷新问题。这种方法简单易行,适用于大多数需要防止重复提交的应用场景。开发者可以根据实际需求调整随机字符串的生成规则和...
针对这个问题,我们可以采取多种策略来防止刷新后退时的重复提交。以下是针对"防止刷新后退重复提交"这一主题的详细知识点: 1. **令牌(Token)技术**: 服务器在处理表单提交前,生成一个唯一的令牌(Token),...
另外,如果不需要保留页面状态,完成数据提交后,可以重定向到当前页面,这样也能有效防止刷新导致的重复提交。 在实际应用中,这两种方法都有其适用场景。第一种方法适用于简单的页面,只需要阻止页面被缓存即可;...
在ASP.NET开发中,防止重提交(也称为双重提交或重复提交)是一个重要的问题,它涉及到用户可能在页面刷新或网络延迟时意外地多次提交相同的数据。这可能导致数据不一致性和逻辑错误。本文将深入探讨如何在ASP.NET...
在ASP.NET开发中,防止用户通过浏览器的后退按钮重复提交表单是一个常见的问题,因为这可能导致数据的不一致性和数据库的错误。以下是一些防止这种情况的方法和相关的知识点: 1. **利用HTTP响应头控制缓存** - `...
《菜干ASP.NET防刷新控件》用于防止用户向页面后台提交表单等数据后,误操作刷新页面导致数据重复提交,能应用与C#.net的winform或webform,只需要简单的引用就可避免编写大量的语句来实现该功能。 引用步骤: 1、...
综上所述,通过在Session中存储并检查Token的方法,我们可以有效防止用户刷新页面导致的表单重复提交问题。这种方法简单易行,且不需要客户端的支持,仅依赖服务器端的会话管理机制。在实现时,应确保Token的安全性...
### ASP.Net中防止刷新自动触发事件的解决方案 #### 背景与问题描述 在ASP.NET Web应用程序开发过程中,一个常见的问题是当用户刷新页面时,可能会导致某些服务器端事件被重复触发。例如,在一个注册页面中,用户...