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