aspnet网页防止后退或刷新造成重复提交

aspnet网页防止后退或刷新造成重复提交

设网站有两个网页,提交第一页后转到第二页,这时,如用通过浏览器的后退功能,会使浏览器再次呈现第一页,这就可能出现重复提交,另外,转到第二页后,刷新浏览器,也会退返回第一页,也可造成重复提交。

理想的情况是这样的,提交第一页后转到第二页,这时,如用通过浏览器的后退功能,浏览器再次呈现第一页,这时提交,则出现“网页已过期”提示,并且不再执行提交转跳等操作,或转到第二页后,刷新浏览器,则出现“网页已过期”提示。

现提供一种简单的方法,示例代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="NoRepearSubmit.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Text="网页已过期!"></asp:Label>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        <br />
        <br />

    </div>
    </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace NoRepearSubmit
{
    public partial class WebForm1 : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                Label1.Visible = false;
                if (Session["IsForm1Valid"] == null)
                {
                    Session["IsForm1Valid"] = "true";
                    ///下接初始化代码
                }
                else
                {
                    if (Session["IsForm1Valid"].ToString() == "false")  Label1.Visible = true;//刷新
                }
            }

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            if (Session["IsForm1Valid"].ToString () == "true")
            {
                ///
                ///正常的代码位于此位置
                ///
                Session["IsForm1Valid"] = "false";
                Server.Transfer("WebForm2.aspx");
            }
            else
            {
                Label1.Visible =true ;
            }
        }

    }
}

是不是很简单,要点说一下,网页提交时都会执行Page_Load方法,在上述代码中所描述的网页中,单击按钮后,首先会先执行Page_Load方法,然后才执行

Button1_Click方法,且此时的IsPostBack的值为真。第一次打开网页或刷新浏览器时,也会执行Page_Load方式,且此时IsPostBack的值为假。

时间: 2024-07-31 00:23:12

aspnet网页防止后退或刷新造成重复提交的相关文章

asp.net防止刷新时重复提交

前段时间遇到了需要禁用刷新的需求,f5按钮就不说了,简单的js就能把它禁用,但是工具条上的刷新按钮却傻傻干不掉. 如果简单的在刷新时重新加载画面,通过window.location.href="url"可以很容易的实现,但是需求是要求在刷新时什么都不做,保留画面的状态,这下子可就复杂化了. asp.net中分辨请求是重新请求还是通过刷新按钮再次请求不是很方便,为了实现这个效果,试过了很多的方式,一下面的两种为例 1. private bool pageRefreshed = false

防止刷新/后退引起的重复提交问题的Java Token代码,非Struts

贴子转自http://hi.baidu.com/bobylou,转之前并没有验证文章里的方法是不是有效,估计原作者把它放到blog之前应该做过测试了吧. Struts本身有一套完善的防止重复提交表单的Token(令牌)机制,但笔者目前的项目自写的framework没有用到Struts,故也得自写防止用户因为后退或者刷新来重复提交表单内容的Token机制.不难,容易实现. 实现原理:一致性.jsp生成表单时,在表单中插入一个隐藏<input>字段,该字段就是保存在页面端的token字符串,同时把

web开发,关于jsp的常见问题,重复提交,防止后退。

看了网上的,有几种方法:1 在你的表单页里HEAD区加入这段代码: <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT="

ASP.NET Web Form和MVC中防止F5刷新引起的重复提交问题

转载  http://www.cnblogs.com/hiteddy/archive/2012/03/29/Prevent_Resubmit_When_Refresh_Reload_In_ASP_NET_Web_Form_MVC.html 什么是刷新/重新载入 IE中的刷新(Refresh),在FF和Chrome中称为重新载入(Reload),与正常进入页面的区别在于以下两点: 1. 缓存控制 如果文件(比如图片)在本地缓存中已经存在,正常进入页面会不访问服务器而直接从本地加载.而对于刷新操作,

java防止表单重复提交

目前还没有遇到.感觉是会遇到的,先在这里存一下 1 在你的表单页里HEAD区加入这段代码: <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" C

表单防重复提交

防止表单重复提交 介绍了使用 redirect 技术防止表单提交,但是 redirect 解决不了后退到表单页面时重复提交表单,为了解决这个问题,加入了 token 的机制.如果每个 form 相关的处理方法中都写一遍 token 的生成和校验代码,在实际项目中是不太能接受的,接下来介绍了使用拦截器的方式生成和校验 token. 1. 常规防止表单重复提交流程: GET 访问表单页面 填写表单 POST 提交表单 Server 端处理表单数据,例如把数据写入数据库 重定向到另一个页面,防止用户刷

jsp 防止重复提交

今天在环境上发现一个问题  遂在网上查的 看了网上的,有几种方法: 1 在你的表单页里HEAD区加入这段代码:  <META HTTP-EQUIV="pragma" CONTENT="no-cache">  <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">  <META HTTP-EQUIV="ex

[原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

session案例:防止表单重复提交、一次性校验码

session案例1:防止表单重复提交 原理: 1,表单页面由servlet程序生成,servlet为每次产生的表单页面分配一个唯一的随机标识号,并在FORM表单的一个隐藏字段中设置这个标识号,同时在当前用户的Session域中保存这个标识号. 2,当用户提交FORM表单时,负责处理表单提交的serlvet得到表单提交的标识号,并与session中存储的标识号比较,如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号. 3,在下列情况下,服务器程序将拒绝用户提交的表单请求