P[1].Net中防止页面刷新重复提交的几种方法+.doc_第1页
P[1].Net中防止页面刷新重复提交的几种方法+.doc_第2页
P[1].Net中防止页面刷新重复提交的几种方法+.doc_第3页
P[1].Net中防止页面刷新重复提交的几种方法+.doc_第4页
P[1].Net中防止页面刷新重复提交的几种方法+.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、也是最简单和最常用的办法,就是使用转向页面语句,分两种: a.使用服务器端的 Response.Redirect(Request.UrlReferrer.ToString(); b.使用客户端脚本 location.href=yourPage; 这两种方法的缺点是如果要保留页面数据不太方便,如果不用保留可以采用。2、操作完毕设置一个Session,进入页面时判断这个Session是否为null,如果不是表示已经提交过了,但是缺点就是这个页面无法再提交了,必须在别的页面清空这个Session。Page_Load中加入 Response.Cache.SetNoStore(); /Session中存储的变量“IsSubmit”是标记是否提交成功的 if (!IsPostBack) if (SessionIsSubmit=null) Session.Add(IsSubmit,false); if (bool)SessionIsSubmit) /如果表单数据提交成功,就设“SessionIsSubmit”为false SessionIsSubmit = false; /显示提交成功信息 TextBox1.Text = * 提交成功!; else /否则的话(没有提交,或者是页面刷新),不显示任何信息 TextBox1.Text = ; Response.End(); 提交按钮中加入 SessionIsSubmit = true; Response.Redirect (本页); 3、是从网上搜索到的一种方案,学习并共享一下:DetectRefresh.aspx = Detecting Page Refresh Demo IsRefresh = StevenBey.Web.UI.Page.cs = namespace StevenBey.Web.UI public class Page : System.Web.UI.Page private bool _refreshState; private bool _isRefresh; public bool IsRefresh get return _isRefresh; protected override void LoadViewState(object savedState) object allStates = (object) savedState; base.LoadViewState(allStates0); _refreshState = (bool) allStates1; _isRefresh = _refreshState = (bool) Session_ISREFRESH; protected override object SaveViewState() Session_ISREFRESH = _refreshState; object allStates = new object2; allStates0 = base.SaveViewState(); allStates1 = !_refreshState; return allStates; 在提交事件这么写if (!IsRefresh) .Asp.Net防止刷新重复提交数据小记 Asp.Net防止刷新重复提交数据小记最近在用Asp.Net编写点东西时遇到个问题:即用户在提交表单后按刷新就会重复提交数据,即所谓的“刷新重复提交”的问题。在网上搜 一下,可以找到很多关于这方面的资料,其中有一篇是来自MSDN上的一种解决方法: /library/default.asp?url=/library/en-us/dnvs05/html/BedrockASPNET.asp 它是通过重新定义 System.Web.UI.Page 类来实现加载页面时,是“刷新”、“后退”请求,还是正常请求,其他的页面则继承了自定义的这 个Page类。感觉他这个方法比较独特,有例子可以下载,有兴趣的可以研究研究。 网上最多的解决此类问题的方法就是不保存缓存,即提交后表单上的数据不会被浏览器的缓存保存,如果此时再遇到刷新或者后退请求时, 就会显示“网页已过期”,数据也就不会重复提交了,这就起到了阻止刷新重复提交的效果。 下面以简单的提交一篇帖子为例,介绍禁用缓存防止刷新重复提交的方法,表单数据包括“标题”和“正文”两个部分。 以下是该方法的代码(post.aspx): /页面加载 protected void Page_Load(object sender, EventArgs e) /可以在页面加载时设置页面的缓存为“SetNoStore()”,即无缓存 Response.Cache.SetNoStore(); /Session中存储的变量“IsSubmit”是标记是否提交成功的 if (bool)SessionIsSubmit) /如果表单数据提交成功,就设“SessionIsSubmit”为false SessionIsSubmit = false; /显示提交成功信息 ShowMsg.Text = * 提交成功!; else /否则的话(没有提交,或者是页面刷新),不显示任何信息 ShowMsg.Text = ; /提交按钮(btnOK)单击事件 protected void btnOK_Click(object sender, EventArgs e) if (txtTitle.Text.ToString().Trim() = ) /ShowMsg是用来显示提示信息的 ShowMsg.Text = * 标题不能为空!; else if (txtText.Text.ToString().Trim() = ) ShowMsg.Text = * 内容不能为空!; else /这里是将数据提交到数据库中,省略 /* string sql = insert into tab.values(.); MyConn.ExecQuery(sql); */ /提交成功后,设“SessionIsSubmit”为true SessionIsSubmit = true; /强制转换页面(不可少,否则刷新仍会重复提交,仍转到本页), 通过页面的转换将缓存中的提交的数据都释放了,即提交的标单数据不会被保存到缓存里, 如果后退的话,将会出现该页无法显示 Response.Redirect(post.aspx); 上面这个方法非常简单也很实用,推荐大家使用。 下面是我自己研究出来的另一种方法,该方法不同于“不保存缓存的方法”,它是让浏览器保存所有页面缓存的。该方法通过随机码的方式 来判断是正常提交还是“刷新”或“后退”的。 首先(提交页面是post.aspx)在Session中增加变量Rnd 用来存放随机码,同时在提交表单数据时不做处理,而是让页面转到 post.aspx?r=x,这里“x”等于SessionRnd,这个时候在页面加载时,通过判断r的值和SessionRnd的值是否相同,如果相同就处理提 交的数据,否则即可认为是“刷新”或者是“后退”操作了,最后再次付给SessionRnd一个随机码。 以下是该方法代码(post.aspx): /获取随机码 public class MyRnd public static string Rnd() /随机码是由 0-9 a-z A-Z 之间的数字或字母组成的 /下面是生成的20位随机码 /0.9 A.Z a.z /48-57 65-90 97-122 string rst = ; Random rr = new Random(); for (int i = 0; i = 48) & (ir = 65) & (ir = 97) & (ir = 122) break; while (true); rst += (char)ir).ToString(); return rst; /页面加载 protected void Page_Load(object sender, EventArgs e) /获取URL中请求的“r”值,如果“r”不存在则 r= string r = ; if(Request.QueryStringr != null) r = Request.QueryStringr.ToString().Trim(); string t; /获取 “Session” 中的 “Rnd” 值,用于和“r”比较 t = SessionRnd.ToString().Trim(); /如果“r=t”则为提交操作,即可对表单的数据进行处理 if(r = t) if (txtTitle.Text.ToString().Trim() = ) ShowMsg.Text = * 标题不能为空!; else if (txtText.Text.ToString().Trim() = ) ShowMsg.Text = * 内容不能为空!; else /这里是将数据提交到数据库中,省略 /* string sql = insert into tab.values(.); MyConn.ExecQuery(sql); */ /提交成功后清空表单数据 txtTitle.Text = ; txtText.Text = ; /显示提交成功信息 ShowMsg.Text = * 提交成功!; /否则可以认为是“刷新”或者“后退”操作 else txtTitle.Text = ; txtText.Text = ; /最后要重新获得“SessionRnd”的值,并将“btnOK.PostBackUrl”设为“SessionRnd”的值 SessionRnd = MyRnd.Rnd(); btnOK.PostBackUrl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论