首页 > 代码库 > aspnet网页防止后退或刷新造成重复提交

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的值为假。

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