您的位置:首页 > 编程语言 > ASP

ASP.Net中防止页面刷新重复提交的几种方法

2011-06-08 07:53 1306 查看
1、也是最简单和最常用的办法,就是使用转向页面语句,分两种:
a.使用服务器端的 Response.Redirect(Request.UrlReferrer.ToString());

b.使用客户端脚本 <script language=javascript>location.href='yourPage';</script>
这两种方法的缺点是如果要保留页面数据不太方便,如果不用保留可以采用。

2、操作完毕设置一个Session,进入页面时判断这个Session是否为null,如果不是表示已经提交过了,但是缺点就是这个页面无法再提交了,必须在别的页面清空这个Session。

Page_Load中加入
Response.Cache.SetNoStore();
//Session中存储的变量“IsSubmit”是标记是否提交成功的
if (!IsPostBack)
if (Session["IsSubmit"]==null)
Session.Add("IsSubmit",false);
if ((bool)Session["IsSubmit"])
{
//如果表单数据提交成功,就设“Session["IsSubmit"]”为false
Session["IsSubmit"] = false;
//显示提交成功信息
TextBox1.Text = " * 提交成功!"; }
else
{//否则的话(没有提交,或者是页面刷新),不显示任何信息
TextBox1.Text = "";
Response.End();
}
提交按钮中加入
Session["IsSubmit"] = true;
Response.Redirect ("本页");

3、是从网上搜索到的一种方案,学习并共享一下:
DetectRefresh.aspx
===========================
<%@ Page Inherits="StevenBey.Web.UI.Page" %>
<html>
<head>
<title>Detecting Page Refresh [Demo]</title>
</head>
<body>
<form runat="server">
<asp:button Text="Test Refresh" runat="server" />
</form>
IsRefresh = <%= IsRefresh %>
</body>
</html>

StevenBey.Web.UI.Page.cs
======================
namespace StevenBey.Web.UI
{
public class Page : System.Web.UI.Page
{
private bool _refreshState;
private bool _isRefresh;

public bool IsRefresh
{
get
{
return _isRefresh;
}
}

protected override void LoadViewState(object savedState)
{
object[] allStates = (object[]) savedState;
base.LoadViewState(allStates[0]);
_refreshState = (bool) allStates[1];
_isRefresh = _refreshState == (bool) Session["__ISREFRESH"];
}

protected override object SaveViewState()
{
Session["__ISREFRESH"] = _refreshState;
object[] allStates = new object[2];
allStates[0] = base.SaveViewState();
allStates[1] = !_refreshState;
return allStates;
}
}
}

在提交事件
这么写

if (!IsRefresh)
{...}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: