ASP.NET防止 重复提交
目前很多网站都要提交页面插入或更新数据库,比如留言本,一个用户提交留言后,如果按F5,就会重新提交一遍留言,导致数据库出现两条一模一样的留言,
本文介绍了几种防止页面刷新,导致重复提交数据的方法。
目前很多网站都要提交页面插入或更新数据库,比如留言本,一个用户提交留言后,如果按F5,就会重新提交一遍留言,导致数据库出现两条一模一样的留言, 本文介绍了几种防止页面刷新,导致重复提交数据的方法。
【全文】
1、也是最简单和最常用的办法,就是使用转向页面语句,分两种: a.使用服务器端的 Response.Redirect("YourPage"); b.使用客户端脚本 <script language=javascript>location.href=‘yourPage‘;</script> 这两种方法的缺点是如果要保留页面数据不太方便,如果不用保留可以采用。
2、操作完毕设置一个Session,进入页面时判断这个Session是否为null,如果不是表示已经提交过了,但是缺点就是这个页面无法再提交了,必须在别的页面清空这个Session。
3、是从网上搜索到的一种方案,学习并共享一下: DetectRefresh.aspx ===========================
本文章转载:http://www.360doc.com/content/13/1202/09/10504424_333802187.shtml
<%@ 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; } } }
需要刷新判断功能时新页面只需继承该类就可,通过引用属性IsPageRefreshed识别"为真表示刷新,假则是正常提交",将数据库的操作写在
if(!IsRefresh )
{
数据库操作
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。