急!怎样防止页面刷新时,再次提交上次数据!
点一个Button后,刷新页面,页面会再次提交上次的数据,并执行按钮的动作,这会使得有些Insert,Update动作重复执行,怎样才能避免刷新页面时重复提交?
请不要使用页面重定向方法,因为页面数据需要保留
问题点数:100、回复次数:57Top
1 楼gxboy(Blin 小学生学.NET)回复于 2005-08-09 13:42:42 得分 5
非asp.net控件表单的提交。在一个page页上放一个ifram,指定表单提交的框架为这个ifram,提交后禁用表单。
ifram长宽可指定为0,这样在网页中就看不见。Top
2 楼smoothwood(吾谁与归)回复于 2005-08-09 13:46:37 得分 5
在page_load中加上
Response.Cache.SetCacheability(HttpCacheability.NoCache)Top
3 楼TankBu(坦克布)回复于 2005-08-09 13:58:55 得分 0
后台好像没什么好办法,
关掉Cache只能防后退,不能防止刷新重复提交数据吧Top
4 楼kgdiwss(∮明天去要饭)回复于 2005-08-09 14:03:51 得分 5
http://blog.csdn.net/kgdiwss/archive/2005/08/04/445846.aspxTop
5 楼zhangA()回复于 2005-08-09 14:07:17 得分 0
要不你就截获数据库错误Top
6 楼TankBu(坦克布)回复于 2005-08-09 14:10:05 得分 0
如果数据库没错误呢?
很多时候重复刷新并不会造成数据冲突啊Top
7 楼xvhaijun(狱海)回复于 2005-08-09 14:38:10 得分 0
Response.Write("<script language=javascript>window.location.href='本页地址';</script>");Top
8 楼xvhaijun(狱海)回复于 2005-08-09 14:46:14 得分 0
要求保留提交的是内容?
还是页面还有其他的数据?
既然已经写进去了,如果没别的好注意,退而求其次,在重新加载页面的时候在从数据库读吧...
很烂的办法,大家别笑话俺Top
9 楼fengyunyubin(风云)回复于 2005-08-09 14:47:08 得分 0
你的页面的PAGE_LOAD方法里有没有判定是否第一次载入啊?让页面在非第一次载入时,不用再执行那些方法!Top
10 楼w3k(网络3K)回复于 2005-08-09 14:48:56 得分 0
??Top
11 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-08-09 14:52:15 得分 0
在提交的代码后面
加上
Response.Write("<script language=javascript>alert('操作成功');window.location.href=window.location.href;</script>");
Top
12 楼yeskele()回复于 2005-08-09 15:00:36 得分 0
Response.Write("<script language=javascript>alert('操作成功');window.location.href=window.location.href;</script>");
这个正解Top
13 楼brando_beat(Eの懒龙)回复于 2005-08-09 15:09:40 得分 0
upTop
14 楼sd166(原来如此)回复于 2005-08-09 15:14:03 得分 5
楼主用的是03版本吧,在02版本不会出现这个问题,03版本在ViewState中保存了上次执行的事件状态,所以你当提交完后刷新,会重新执行一遍该事件,Response.Write("<script language=javascript>alert('操作成功');window.location.href=window.location.href;</script>");这个方法虽然可以去除这一问题,但这样做的结果是你ViewState中的其它值也将会丢失,如在程序中无需保留,可以采用,但如还需用到ViewState中的值,这个方法也并不好,可以用这种原始方法:用程序控制,即在你的程序中用代码控制,如库中此记录已存在则不预插入.Top
15 楼smile9961(good life)回复于 2005-08-09 16:34:52 得分 0
回复人: yeskele(可乐) ( ) 信誉:100 2005-08-09 15:00:00 得分: 0
Response.Write("<script language=javascript>alert('操作成功');window.location.href=window.location.href;</script>");
这个正解
-------------------------------------------------------------
需要重新定向到本頁或者定向到其它頁面。
Top
16 楼fengjiehappychen()回复于 2005-08-10 09:34:47 得分 0
upupTop
17 楼aqian2001(像风一样)回复于 2005-08-10 09:58:25 得分 0
uptoo
Top
18 楼JadyZhu(木独朱)回复于 2005-08-10 10:25:51 得分 0
在数据库添加数据时进行控制,重复则不添加;通过Exception捕获的错误代码判断错误类型。Top
19 楼oupatch(QQ:47668753)回复于 2005-08-10 10:28:07 得分 0
提交记录后,最后重定位到本页Top
20 楼visualcpu(VisualCpu)回复于 2005-08-10 10:32:23 得分 0
回复一下,主要想看一下信誉分,好久没有来,见谅Top
21 楼peterHunter()回复于 2005-08-10 10:32:40 得分 0
关注Top
22 楼loveeqing(馨郁星愿→ 看过来........)回复于 2005-08-10 10:58:15 得分 0
我也碰到Top
23 楼zhaoliang_chen(龙行天下)回复于 2005-08-10 11:02:58 得分 0
难题Top
24 楼haoztao(.NET一族)回复于 2005-08-10 11:34:38 得分 0
在page_load中加上
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Top
25 楼iloveyour(爱老虎油)回复于 2005-08-10 12:05:21 得分 0
markTop
26 楼ieooo(Jet)回复于 2005-08-10 12:35:38 得分 0
markTop
27 楼hbtm(初中学历)回复于 2005-08-10 12:36:43 得分 0
加if(!ispostback)不知道行不行Top
28 楼hainang1234(海浪)回复于 2005-08-10 12:55:34 得分 0
为什么不能使用重定向?
需要保留数据就不能使用重定向?
Response.RedirectTop
29 楼sstgaps()回复于 2005-08-10 12:55:38 得分 0
可以设定一个SESSION变量来判断是否是第一次提交Top
30 楼GSXiaoXiao(牧羊人)回复于 2005-08-10 13:09:28 得分 0
也遇到此问题,等候最终答案.Top
31 楼chilin(永恒的月亮)回复于 2005-08-10 13:25:51 得分 0
markTop
32 楼skyfarwolf(Computer)回复于 2005-08-10 13:37:54 得分 0
我用过Session来解决这个问题,也用过从数据库读记录进行判断.Top
33 楼kgdiwss(∮明天去要饭)回复于 2005-08-10 14:24:54 得分 0
不是已经给你答案了吗??
http://blog.csdn.net/kgdiwss/archive/2005/08/04/445846.aspx
还不结贴。Top
34 楼coldpanth(^War3^)回复于 2005-08-10 14:28:26 得分 80
转,孟老大的解决方法
如何区分刷新和提交?
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;
}
}
}Top
35 楼haolaiwu(宁愿相信世界上有鬼,也不相信女人那张嘴)回复于 2005-08-10 14:37:38 得分 0
支持!!!!!!!!Top
36 楼share1011(不知道)回复于 2005-08-10 15:21:13 得分 0
coldpanth(云之飘渺)
vb 的呢???Top
37 楼jxf_yx(清风)回复于 2005-08-10 17:58:17 得分 0
Page.SmartNavigation = true;
既可以了。Top
38 楼TankBu(坦克布)回复于 2005-08-11 13:10:04 得分 0
To : kgdiwss
请看清楚要求:"请不要使用页面重定向方法,因为页面数据需要保留"
孟子的思路不错,完善一下就可以用了Top
39 楼c97164()回复于 2005-08-11 13:34:48 得分 0
我也遇到.不过我解决了.就是重定向.你如果要保留数据就用hidden控件把数据保留不就完了.Top
40 楼wufeng0524(高处不胜寒)回复于 2005-08-11 13:40:04 得分 0
学习。。
__________________________________________
DotNet中华网:www.aspxcn.orgTop
41 楼lei00529(老婆叫我猪)回复于 2005-08-11 15:01:31 得分 0
支持孟子老大!Top
42 楼lazycat818(lazycat818)回复于 2005-08-11 15:47:39 得分 0
我个人不喜欢利用页面来提交数据,尤其是页面需要保留的情况下。我建议使用Webservice。Top
43 楼cwlcwr()回复于 2005-08-13 13:44:30 得分 0
关闭STATEVIEWTop
44 楼Study_Now( ? )回复于 2005-08-13 15:21:14 得分 0
红酷叉们:
在page_load中加上
Response.Cache.SetCacheability(HttpCacheability.NoCache)
不能实现楼主的要求,它只是不让后退。不信你们试试!!!!Top
45 楼Aa7643()回复于 2005-08-13 23:00:22 得分 0
mark
Top
46 楼pandahyang(偶在学习.NET)回复于 2005-08-13 23:39:46 得分 0
用Session这个比较方便,第一次提交数据时把Session设置为一个值,如果他重复提交的话就判断这个Session是否有值存在就可以了Top
47 楼smin1994(smin1994)回复于 2005-08-15 11:07:29 得分 0
markTop
48 楼jackyR(月夜随想 )回复于 2005-08-22 23:11:47 得分 0
markTop
49 楼hbtm(初中学历)回复于 2005-08-23 11:32:51 得分 0
uoTop
50 楼fanweiwei(黑暗凝聚力量,堕落方能自由)回复于 2005-08-23 11:46:57 得分 0
UPTop
51 楼rusheagle(一条象猪的鱼在水里游来游去)回复于 2005-09-04 15:26:52 得分 0
markTop
52 楼tigerjacky(林石--抢滩VC)回复于 2005-09-04 19:31:11 得分 0
markTop
53 楼harrisonyu(badog)回复于 2005-09-04 19:47:38 得分 0
mark
Top
54 楼zeusvenus()回复于 2005-09-04 20:02:50 得分 0
是返回页面的问题,把你取要填充到数据库中的值及数据更新等代码放到
if(!(Page.IsPostBack))
{
}
中试试。
这样不会清空你的页面数据也不会重复提交。Top
55 楼woainin(woainin)回复于 2005-09-04 22:22:25 得分 0
if(!(Page.IsPostBack))
{
}
Top
56 楼kuibobo(^踏雪无痕)回复于 2005-09-04 22:47:59 得分 0
帮你 UP
关注Top
57 楼xjtandqt(重在参与)回复于 2005-12-05 20:50:53 得分 0
markTop




