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的值为假。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。