`
zxlyecf2
  • 浏览: 133559 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

asp.net防止页面刷新或后退引起重复提交

阅读更多

前段时间做项目,在提交完数据后刷新页面,会弹出要你重试的对话框,当点击重试就会发生重复提交的问题,任何查了一下问题,搜集了一些可用的解决方案:

 

1.请求转发(执行数据库中的更新操作后立即转跳到其他页面,防止页面刷新引起回发操作)。

2.重新加载该页面(通过JavaScript来设置当执行操作后重新加载该页面:)。

3. 不保存缓存(即提交后表单上的数据不会被浏览器的缓存保存,如果此时再遇到刷新或者后退请求时, 就会显示“网页已过期”,数据也就不会重复提交了,这就起到了阻止刷新重复提交的效果。

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");

  }

}

 (详情参见: http://www.cnblogs.com/zpq521/archive/2007/08/14/854631.html))

 

4.MSDN的一种解决方案: 它是通过重新定义 System.Web.UI.Page 类来实现加载页面时,是“刷新”、“后退”请求,还是正常请求,其他的页面则继承了自定义的这 个Page类

(详情参见:http://msdn.microsoft.com/zh-cn/library/ms379557(VS.80).aspx )

      (1)引用程式集合

     (2)在web.config中添加

       <httpModules>
      <add name="MsdnModule" type="Msdn.RefreshModule, MsdnExt"/>

       </httpModules>

     (3) 页面继承Msdn.Page

     (4)在更新的代码中使用

        void AddContactButton_Click(object sender, EventArgs e) {
          if (!IsPageRefresh)
            {

                     ......//更新代码
                    TrackRefreshState();
            }

 

 

5.最好的防止"刷新"是代码被重复调用的方法还是在服务器端做检查, 并经行处理.

下面的代码放在page_load方法中, 它可以检测"刷新":

bool IsPageRefresh = false;
//this section of code checks if the page postback is due to genuine submit by user or by pressing "refresh"
if (!IsPostBack)
{
    ViewState["ViewStateId"] = System.Guid.NewGuid().ToString();
    Session["SessionId"] = ViewState["ViewStateId"].ToString();
}
else
{
    if (ViewState["ViewStateId"].ToString() != Session["SessionId"].ToString())
    {
        IsPageRefresh = true;
    }
    Session["SessionId"] = System.Guid.NewGuid().ToString();
    ViewState["ViewStateId"] = Session["SessionId"].ToString();
}     

 之后, 就可以在后台代码中用"IsPageRefresh"来判断一个PostBack是来自用户点击按钮还是浏览器的"刷新"啦.

3
0
分享到:
评论

相关推荐

    Asp.net 后退刷新重复提交问题解决办法

    页面提交后,后退,刷新会重复提交,导致很多麻烦,.net里可以这样来解决一下,一个类文件,省去每个页面都写的麻烦

    Asp.net刷新重复提交

    在ASP.NET web应用程序中,"刷新重复提交"是一个常见的问题,它发生在用户点击浏览器...总的来说,理解和掌握防止ASP.NET刷新重复提交的方法对于构建健壮的Web应用至关重要,因为它直接关系到数据的安全性和用户体验。

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

    如果随机码不匹配,则表明用户可能是通过刷新页面或点击后退按钮进行操作,此时系统将忽略这个提交请求,不进行任何数据处理,从而避免了重复提交的问题。 这种方法的优点在于它保留了缓存带来的性能优势,适用于...

    防止刷新后退重复提交

    在Web开发中,用户在提交表单后可能会意外地点击浏览器的刷新或后退按钮,导致数据重复提交,这在...例如,利用ASP.NET的ViewState、Session或Cookie等特性,结合服务器端和客户端的代码来达到防止重复提交的目的。

    asp.net 防止用户通过后退按钮重复提交表单

    在ASP.NET开发中,防止用户通过浏览器的后退按钮重复提交表单是一个常见的问题,因为这可能导致数据的不一致性和数据库的错误。以下是一些防止这种情况的方法和相关的知识点: 1. **利用HTTP响应头控制缓存** - `...

    asp.net多页签页面切换

    在ASP.NET开发中,实现多页签页面切换是一种常见的用户界面设计,它可以提供更好的用户体验,让用户在一个页面上浏览和操作多个相关的内容区域。本篇将详细介绍如何在ASP.NET环境中实现这样的功能,主要涉及的知识点...

    asp.net 禁止F5和后退

    浏览器会有“不重新发送信息,则无法刷新网页”的提示,若刚刚执行的恰好是往数据库插入一条新记录的操作,点[重试]的结果是插入了两条重复的记录,以前一直是用保存数据后重新转向当前页面的方法解决,最近又找到了...

    ASP.NET常见页面传值

    在ASP.NET中,页面间或页面内的数据传递是至关重要的,它允许我们维持用户的状态信息,或者在不同请求之间传递数据。本篇文章将详细介绍三种常见的页面传值方法:Session、QueryString和Server.Transfer。 1. ...

    asp.net简单的万年厉

    ASP.NET是一种基于.NET框架的服务器端编程环境,用于构建动态Web应用程序。在ASP.NET中创建一个简单的万年历是一项常见的任务,它可以帮助用户查看任何年份的日历,并进行相关的日期操作。下面,我们将深入探讨如何...

    ASP.NET 网页浏览器

    总的来说,"ASP.NET 网页浏览器"项目是一个结合了ASP.NET Web开发知识和C#桌面应用开发技术的实践案例,对于希望扩展技能树或深入了解.NET平台的开发者来说,这是一个宝贵的资源。通过研究和分析这个项目,开发者...

    asp.net WebBrowser 学习教程

    ASP.NET WebBrowser 控件是.NET Framework 提供的一个强大的组件,用于在ASP.NET应用程序中嵌入一个基于Internet Explorer的浏览器。这个控件允许开发者在网页应用中实现与网页交互的功能,如自动化网页操作、页面...

    ASP.NET图片跳动轮换

    3. AJAX:ASP.NET的AJAX扩展可以实现无刷新更新,使图片轮播在不重新加载整个页面的情况下进行。利用UpdatePanel或jQuery的AJAX方法,可以在后台处理图片切换逻辑,然后仅更新轮播区域。 4. 定时器:JavaScript的`...

    ASP.NET AJAX控件工具包

    ASP.NET AJAX 控件工具包是ASP.NET框架的一部分,它提供了丰富的客户端控件和扩展器,以增强Web应用程序的用户体验和交互性。这个工具包利用AJAX(Asynchronous JavaScript and XML)技术,允许部分页面更新,减少了...

    asp.net面试宝典说辞.doc

    ASP.NET是Microsoft开发的一种用于构建Web应用程序的框架,它提供了丰富的功能和工具,使得开发者能够高效地构建动态、数据驱动的网站。在面试中,掌握ASP.NET的基础知识是非常关键的,而AJAX技术则常常是面试中讨论...

    用js来刷新当前页面保留参数的具体实现

    这是由于Session的安全保护机制导致的,因为浏览器在POST提交后尝试刷新页面,服务器会认为这是重复提交的请求,可能会拒绝执行,导致“网页过期”的错误提示。解决这个问题的一个方法是使用location.replace()方法...

    一个基于ASP.NET+js实现的网上音乐共享的播放程序例子源码

    在这个项目中,ASP.NET主要负责处理用户请求、与数据库交互、控制页面流程等。例如,`Default.aspx`是一个ASP.NET网页文件,它定义了用户在浏览器中看到的界面结构和样式。而`Default.aspx.cs`是对应的后台代码文件...

    ASP.NET的Ajax工具

    5. **PageMethods** 和 **WebServices**:ASP.NET AJAX支持直接从客户端JavaScript调用服务器端的PageMethods或WebServices,实现数据的异步获取和提交。 6. **Partial Page Rendering**:ASP.NET AJAX实现了部分...

    .NET 屏蔽页面回退、鼠标右键、功能键

    在.NET开发中,有时我们需要对Web应用程序的用户体验进行一定的控制,比如防止用户通过浏览器的后退按钮、功能键(如F5刷新或Ctrl+S保存)或者鼠标右键菜单执行特定操作。这通常是为了保护数据的一致性,防止未授权...

Global site tag (gtag.js) - Google Analytics