Asp.Net防止刷新重复提交数据的办法

前端技术 2023/09/06 .NET

在网上搜 一下,可以找到很多关于这方面的资料,其中有一篇是来自MSDN上的一种解决方法: http://msdn.microsoft.com/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)Session[\"IsSubmit\"])

   {

     //如果表单数据提交成功,就设“Session[\"IsSubmit\"]”为false

     Session[\"IsSubmit\"] = 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);

     */

     //提交成功后,设“Session[\"IsSubmit\"]”为true

     Session[\"IsSubmit\"] = true;

     //强制转换页面(不可少,否则刷新仍会重复提交,仍转到本页),

     通过页面的转换将缓存中的提交的数据都释放了,即提交的标单数据不会被保存到缓存里,

     如果后退的话,将会出现该页无法显示

     Response.Redirect(\"post.aspx\");

  }

}

本文地址:https://www.stayed.cn/item/15567

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。