asp.net防刷新重复提交、防后退
1、提交后 禁用提交按钮(像CSDN这样)
2、数据处理成功马上跳转到另外一个页面
操作后刷新的确是个问题,你可以使用跳转页面、关闭本页面,如果是有参数据条件来控制的,那就应该好做了,可以直接修改window.location的值,把值的参数全部改掉,这样就可以了。我用的方法就是以上的。
document.all("save_"+idx).disabled=true;
刚才有位兄弟也这么问其实很简单
在提交的页面也就是数据库处理之前
if session("jy")=true then
response.write "错误,正在提交"
response.end
end if
在数据库处理完毕后,释放session("jy")
session("jy")=false
即可!
用SESSION 或者用个麻烦点的方法:
用window.open 弹出表单输入页面,点提交后关闭该页;
处理提交的ASP页也是用弹出,即先设定表单的target为"submit_form",点提交时window.open("XXX.asp","submit_form"),然后用JS来提交表单,最后就是window.close();
对处理提交的ASP页,输入数据到数据库完成后,弹出对话框,“提交成功”什么的,最后也来个window.close();
因为对于window.open()打开的窗口,用window.close()来关闭时不会弹出提示框,直接就关闭窗口了,这样用户就根本没有机会做重复提交了。
不知道这样合不合你的意思
2、数据处理成功马上跳转到另外一个页面!
这个方法最简单
转:(原理借用)
首先,我们可以定义一个session变量用来保存一个表单的提交序列号。这里我定义为“$userLastAction”。然后在表单里加入一个hidden变量,把值设为$userLastAction+1:
<input type=Hidden name=lastAction value=<? =$userLastAction+1 ?>>
最后,在处理提交之前判断表单是否已被提交过:
if($lastAction>$userLastAction and inputIsValid(...)){
$userLastAction++; // 序列号加1
// 处理表单数据
}
我一直使用这个
你的后台处理页面,也就是数据接收页面,执行完相关的操作后,使用下面的语句:
response.write("<script>alert('数据提交成功******');window.location.href='你想要转向的页面的地址';</script>")
这样随便他返回后怎么刷新,显示的始终是“数据提交成功******”的对话框
Top
回复人:arcow(冲星) ( ) 信誉:100 2004-10-24 17:09:40 得分:0
?
<SCRIPT. LANGUAGE="javascript">
<!--
function input(ok)
{
var M1=ok.ReplyContent.value;
if (M1==''){
alert('回复内容不可以为空.');
return false;
}
ok.B1.disabled =true;
ok.B2.disabled =true;
return true;
}
//-->
</script>
<form. nsubmit="return input(this)">
<input type=text name=ReplyContent>
<input type="submit" value="发出回复" border="0" name="B1">
<input name="B2" TYPE="reset"value="重 写">
</form>
这样就行了,提交后直接转到另一页面
1、让提交后返回历史记录
Response.Write"<script>alert('OK!添加成功!');history.back();</script>"
2、提交后跳转到本页
response.redirect "index.asp"
Response.Write"<script. language=javascript>alert('提交成功!');window.location.href='"&Request.ServerVariables("Http_Referer")&"';</script>"
===========================================
防止网页后退
我们在进行数据库添加操作的时候,如果允许后退,而正巧有刷新了页面,就会再次执行添加操作,无疑这不是我们需要的,像一般网上很多禁止缓存的代码,有时并不可靠,这时你只要在操作的页面加上<body nbeforeunload="window.location.replace('')">就可以了,在网页的里指定要定向的新页,再点后退,看是不是不会再退到刚才的操作页面了,实际上已经把这个历史给删除了
============================
Response.Buffer=true;
Response.ExpiresAbsolute=DateTime.Now.AddSeconds(-1);
Response.Expires=0;
Response.CacheControl="no-cache";
==========