- 浏览: 207163 次
- 性别:
- 来自: 云南
文章分类
最新评论
-
naily:
不错 很稳定
jquery下拉菜单 -
hautbbs:
有没有在浏览器中查看的快捷键啊?每次感觉到这里的操作很繁琐啊! ...
VS2010版快捷键(转载) -
a535114641:
挺好用的 谢谢LZ
JQuery实现文本框自动补全(修改版) -
wgbbiao:
不支持firefox
JQuery实现文本框自动补全(修改版) -
bengxia:
Ctrl+F6: 生成当前项目 ==> Shift+F6 ...
VS2010版快捷键(转载)
以前也研究过,始终没找到好的办法,看了微软Msdn上的解决方案,使用后发现存在较多漏洞,考虑的情况太少,如页面加载后没有提交,始终刷新,在同一浏览器打开多个各选项卡,每个选项卡打开同一页面或不同页面,以下是我的解决方案,
需要刷新判断功能时新页面只需继承该类就可,通过引用属性IsPageRefreshed识别"为真表示刷新,假则是正常提交",将数据库的操作写在
if(!IsPageRefreshed)
{
数据库操作
}
即可,如果是刷新不会执行,代码中注释部分使用的是Session方式保存票证,因为session比较容易丢失且占内存,所以使用cookie,
出自http://www.cnblogs.com/xiaobier
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; } }
需要刷新判断功能时新页面只需继承该类就可,通过引用属性IsPageRefreshed识别"为真表示刷新,假则是正常提交",将数据库的操作写在
if(!IsPageRefreshed)
{
数据库操作
}
即可,如果是刷新不会执行,代码中注释部分使用的是Session方式保存票证,因为session比较容易丢失且占内存,所以使用cookie,
出自http://www.cnblogs.com/xiaobier
发表评论
-
telerik 2011 q2全系列, 开发版+源代码,无需序列号
2012-03-29 09:25 1841telerik 2011 q2全系列, 开发版+源代码,无需序 ... -
正则表达式的学习与小结
2011-12-15 11:47 1155收藏自:http://blog.csdn.net/sunboy ... -
.NET DataTable
2011-05-19 10:14 1313/// <summary> ... -
常见的数字验证正则表达式整理(转载)
2010-12-03 17:37 923转自:http://kingoa.net/WEBPROGRAM ... -
C#winform程序,代码修改app.config的结果保存(转载)
2010-11-19 11:18 3818通过Properties.Settings用代码形式读写app ... -
C#正则表达式判断输入日期格式是否正确(转载)
2010-11-18 11:36 1923/// <summary> ... -
如何在HTML代码中去掉文本框出现的历史纪录
2010-09-09 17:13 1637在HTML代码INPUT文本框里加一个属性: < ... -
.Net控件Telerik全套下载:Telerik Controls 2010 Q2 (附加DLL文件+源码)
2010-07-22 14:25 5872Telerik专注于微软.Net平台的表示层与内容管理控件。 ... -
.NET中操作Excel
2010-07-20 13:56 1001GridView导出Excel研究 http://www.cn ... -
让C#写的WINFORM程序脱离框架运行
2010-04-06 09:39 1906利用飞信的框架 1、把飞信安装目录下的VMDotNet文件夹 ... -
ASP.NET中CKEditor3.2和CKFinder1.43的配置和使用!
2010-03-17 11:08 3092通过在网上搜寻资料终于把CKEditor3.2和 CKFind ... -
ASP.NET中FCKEDITOR在线编辑器的用法
2010-03-03 11:29 1585你可以将FCKEDITOR放置到任何文件夹,默认情况下,将其放 ... -
ASP.NET生成高质量缩略图通用函数(VB.NET、c#代码)
2010-03-03 11:22 1668public static void MakeTh ... -
ASP.NET中获取客户端的IP地址
2010-02-05 10:31 1909ASP.NET中获取客户端的IP地址的方法: 方法一: Req ... -
.NET中关于显示星期几的问题
2009-12-31 20:02 1799今天做项目是用到显示当前日期是星期几,上网找了一下,找到如下几 ... -
新闻发布系统(三层架构,工厂模式)
2009-11-11 23:30 1530看了牛腩的新闻发布系统视频后,自己学着做了一个,并在此基础上加 ... -
KindEditor HTML在线编辑器
2009-11-11 23:05 1050一款比较好用的在线编辑器,经常会用到,特此记录一下。 http ... -
ASP.Net中防止页面刷新重复提交的几种方法
2009-09-15 22:31 33991、也是最简单和最常用的办法,就是使用转向页面语句,分两种: ... -
.NET设计模式系列文章
2009-09-15 13:22 862最近正在学习设计模式,看到此文章写的挺好,特此记录下来 呵呵 ... -
.NET中GridView实现自动编号
2009-07-21 14:19 1067protected void GridView1_RowDat ...
相关推荐
### 如何用Response.Redirect方法传递汉字 在ASP.NET开发中,使用`Response.Redirect`方法进行页面跳转并传递参数是一种常见的做法。然而,在实际应用中,可能会遇到通过该方法传递包含汉字的参数时出现乱码或字符...
在ASP.NET开发中,页面跳转是常见的操作,主要涉及两种方法:Response.Redirect和Server.Transfer。它们虽然都能实现页面间的导航,但在工作原理、数据处理和用户体验上存在显著差异。 **Response.Redirect** ...
文件下载response.setHeader()下载中文文件名乱码问题解决办法 本文主要讨论了文件下载时response.setHeader()下载中文文件名乱码问题的解决办法。该问题是由于 HTTP 消息头中的 Content-Disposition 头字段不正确...
### jsp response.sendRedirect不跳转的原因分析及解决 #### 一、问题背景 在进行Web应用开发的过程中,经常需要使用到服务器端重定向的技术。在Java Server Pages (JSP) 技术中,`response.sendRedirect()` 是一...
在ASP.NET开发中,我们经常会遇到“正在中止线程”(ThreadAbortException)的异常,这通常是由于在页面处理过程中使用了`Response.Redirect`或`Response.End`等方法所导致的。这些方法会中断当前线程的执行,引发异常...
在上述示例中,不仅通过`response.sendRedirect`实现了页面跳转和参数传递,还通过Cookie机制实现了数据的跨页面持久化存储。`writeCookie.jsp`负责写入Cookie并重定向至`readCookie.jsp`,而`readCookie.jsp`则负责...
标题中提到的“三种方法让Response.Redirect在新窗口打开”,涉及到的技术点是基于***的网页编程。***是微软推出的一个用于构建Web应用程序的框架。Response.Redirect是一个在***中常用的服务器端方法,用于将用户从...
response.setHeader 问题详解 Response.setHeader 问题是指在 Servlet 中使用 response 对象的 setHeader 方法来设置 HTTP 消息报头,以控制浏览器的缓存行为。本文将详细解释 response.setHeader 的作用、HTTP ...
以上这篇python使用response.read()接收json数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:Python简单读取json文件功能示例Python使用内置...
使用`Response.Write`方法可以在页面上输出内容。这对于动态生成HTML内容非常有用。 ```vbnet Response.Write("<h1>Hello World!</h1>") ``` ##### 3.2 结束当前响应 在某些情况下,可能需要立即终止当前的响应...
在IT行业中,尤其是在Web开发领域,`response.getWriter().write()` 是一个常见的Java Servlet API方法,用于向客户端(通常是浏览器)发送响应数据。这个方法在处理AJAX(Asynchronous JavaScript and XML)请求时...
通过endResponse = false 在Response.Redirect将会解决这个问题. 但这样做会导致应用程序出现一些奇怪的问题。因为应用程序将假设在 Response.Redirect 将在当前页面停止执行.除此之外你需要处理一些安全隐患,因为...
在使用Ajax的`UpdatePanel`时,由于`UpdatePanel`的无刷新特性,直接使用`Response.Redirect`或`Response.Write`进行页面重定向会导致错误。这是因为`Response.Redirect`需要完整页面刷新才能执行。为了解决这个问题...
### Response.AppendHeader 使用大全 #### 一、概述 在 Web 开发中,`Response.AppendHeader` 方法被广泛用于向 HTTP 响应头添加自定义头部信息。这些头部信息可以用来控制浏览器的行为,如缓存策略、文件下载方式...
### 服务器提交了协议冲突.Section=ResponseStatusLine 解决方法 #### 背景与问题描述 在使用 C# 的 `HttpWebRequest` 类进行 HTTP 请求(包括 POST 和 GET 方法)时,有时会遇到“服务器提交了协议冲突. Section=...
### Response.Redirect 与新窗口打开网页的技术解析 在Web开发中,经常需要处理页面重定向以及在新窗口中打开链接的需求。本文将详细介绍如何利用ASP.NET中的`Response.Redirect`方法结合客户端脚本技术来实现这一...
为了解决这个问题,我们可以在读取内容后,将原始的`Stream`备份,然后恢复回去,以便后续的中间件能够正常工作。 ```csharp public async Task InvokeAsync(HttpContext context) { // 备份Request.Body var ...
在Web应用程序开发中,尤其是在使用Java Server Pages (JSP)技术时,一个常见的问题是重复提交数据。当用户不小心刷新了页面或按下了浏览器的“后退”按钮时,可能会导致同一份数据被提交多次,从而对数据库造成不必...