如何防止页面刷新???
当执行按钮操作后,再按刷新,网页还是再次提交刚才的动作。如何才能防止页面刷新呢?查了以前的好多帖子,但都没能解决 问题点数:100、回复次数:34Top
1 楼liulxmooo(娃娃)回复于 2005-01-31 11:01:10 得分 0
upTop
2 楼liulxmooo(娃娃)回复于 2005-01-31 11:04:11 得分 0
加上!IsPostback判断Top
3 楼fellingsky(天若有情)回复于 2005-01-31 11:06:59 得分 0
加了ispostback判断也没有用呢Top
4 楼jackie615()回复于 2005-01-31 11:09:58 得分 0
bugTop
5 楼dcren118(酒仙)回复于 2005-01-31 11:10:24 得分 20
很难解决这个问题呀!
有一个方法 不过很本 就上做一个和有刷新问题一样的页面 当执行完操作以后!
然后就Response.Redirect("default.aspx");Top
6 楼hedonister(冰戈)回复于 2005-01-31 11:10:39 得分 0
ispostbackTop
7 楼leo_boy(www.morock.net)回复于 2005-01-31 11:14:57 得分 0
UP~~Top
8 楼morality(业精于勤,行成于思!)回复于 2005-01-31 11:22:51 得分 20
这个问题好像没有什么很好的解决方法!
不过,有一个较笨但也可行的方法,就是在你的按钮提交成功以后,重新装载一下本页即可!
private void Button1_Click(....)
{
//your other code here
//成功以后加入如下代码,可以防止重复提交数据
this.RegisterStartupScript("redirectSelf","<script language=javascript>window.location.href=window.location.href;</script>");
}Top
9 楼pts_ben(大堂小二)回复于 2005-01-31 11:31:26 得分 0
在page_load()中增加判断
if(!Page.IsPoastBack)
{
//初始化页面内容;
}
Top
10 楼kenMoxi(蓝雨)回复于 2005-01-31 11:35:12 得分 0
添加完成以后,重定向回添加页面!
这样就可以!Top
11 楼leo_boy(www.morock.net)回复于 2005-01-31 11:38:24 得分 0
那麽如何像一些論壇加上防止页面刷新時間?就是3秒内不能刷新??Top
12 楼minghui000(沉迷网络游戏)回复于 2005-01-31 11:38:34 得分 0
BODY之间
<SCRIPT language=javascript>
function click() {if (event.button==2) {alert('欢迎光临,欢迎指导!');}}document.onmousedown=click
</SCRIPT>Top
13 楼lovedogdog(天目湖鱼头)回复于 2005-01-31 11:39:48 得分 0
把页面上输入框的enableviewstate设置为false,提交的时候判断,如果为空就报错,这样刷新也没问题了Top
14 楼91bct(Jerry)回复于 2005-01-31 11:46:51 得分 20
如下这段是copy的:
解决ASP.NET服务器控件造成的刷新问题:
用ASP.NET开发的人对服务器端控件事件引起的页面刷新很头痛吧!
我把解决问题的方法拿出来与大家共享,思路是事件执行完后写段脚本,让页面自动滚动到刷新页面之前的控件处,减少页面刷新
带来的不便。
比如按了一个按钮后,脚本会自动将页面自动滚动到这个按钮的位置。
写段脚本的事情,用了一个ScriptHelper的类来搞定,这个类有个GetViewControlScript(string controlName)的方法,它返回是
一段客户端的脚本,传入的参数就是这个控件的ID。
ScriptHelper类代码:
/// <summary>
/// 提供一些产生页面脚本的方法
/// </summary>
public class ScriptHelper
{
/// <summary>
/// 获取客户端查看控件的脚本
/// </summary>
/// <param name="controlName"></param>
/// <returns>脚本代码</returns>
public static string GetViewControlScript(string controlName)
{
//创建客户端函数ViewObj
string script = "\n";
script += "<script language=\"javascript\">\n";
script += "function ViewObj(objName)\n";
script += "{\n";
script += "var obj = document.all.item(objName);\n";
script += "if (obj != null)\n";
script += "{\n";
script += "\tobj.scrollIntoView();\n";
script += "\tobj.focus();\n";
script += "}\n";
script += "}\n";
//创建客户端函数ToDo
script += "function ToDo()";
script += "{\n";
script += string.Format("setTimeout(\"ViewObj('{0}')\",1000);\n", controlName);
script += "}\n";
script += "window.onload = ToDo;\n";
script += "</script>\n";
return script;
}
}
使用示例:
为了方便输入脚本,我在页面上放了个Label:lblScript,并把lblScript的EnableViewState属性和Visible属性设成False。
然后在lblScrpt的Click事件的操作代码后添加输入脚本的代码,如下所示:
private void btnSave_Click(object sender, System.EventArgs e)
{
project.UpdateProjectInfo(ds);
lblScript.Text = ScriptHelper.GetViewControlScript("btnSave");
}
在点击btnSave按钮后,页面会自动滚动到btnSave的位置,减少了页面刷新带来的不便。
Top
15 楼amendajing(学习,是个漫长的旅途!)回复于 2005-01-31 12:07:31 得分 0
你在!IsPostback里添加页面初始化Top
16 楼fellingsky(天若有情)回复于 2005-02-02 08:37:12 得分 0
除了转向之处,还有没有其它办法呢?比如说利用EnableViewState可不可以解决这个问题?Top
17 楼net_lover(【孟子E章】)回复于 2005-02-02 08:46:09 得分 0
转向事最好的,最简单的了,还可以用这个
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
18 楼net_lover(【孟子E章】)回复于 2005-02-02 08:48:45 得分 0
例子参见
http://stevenbey.co.uk/detectingPageRefresh.demo.aspxTop
19 楼fellingsky(天若有情)回复于 2005-02-02 10:11:46 得分 0
To:net_lover(孟子E章)
我用了你提供的方法,但还是不行,还是会执行Top
20 楼alickjoe(博子)回复于 2005-02-02 10:14:31 得分 0
好像有一个js脚本可以做到防止刷新的时候重复提交,我的一个同事正在研究,等有结果告诉你,你也可以先找找这方面的js。Top
21 楼loveme4180(孤独剑)回复于 2005-02-02 10:25:48 得分 0
加了
if(!this.IsPostBack)
{
要重新绑定;
}Top
22 楼yyne(一步一个脚印往上爬)回复于 2005-02-02 10:28:26 得分 0
upTop
23 楼yyne(一步一个脚印往上爬)回复于 2005-02-02 10:28:56 得分 0
upTop
24 楼guxingwang(lonelystar)回复于 2005-02-02 10:44:49 得分 0
UP,学习Top
25 楼fellingsky(天若有情)回复于 2005-02-02 11:15:07 得分 0
继续找。
如果哪位有高招,请赐教!万分感谢Top
26 楼leo_boy(www.morock.net)回复于 2005-02-02 13:22:06 得分 0
再up~~Top
27 楼fellingsky(天若有情)回复于 2005-02-02 14:57:21 得分 0
upTop
28 楼luckyprg(lucky)回复于 2005-02-02 15:18:41 得分 0
用附加码来控制。Top
29 楼yangtu86(杨土)回复于 2005-02-02 16:41:39 得分 0
学习Top
30 楼fellingsky(天若有情)回复于 2005-02-04 10:35:26 得分 0
解决问题了,我是通过Session来控制的,不知道各位还有没有更好的办法?Top
31 楼njuzgj(罐子)回复于 2005-02-04 12:57:22 得分 0
ispostback
Top
32 楼aqjy(aqjy)回复于 2005-02-06 08:52:04 得分 0
to fellingsky(天若有情):
我也有同样问题,请教fellingsky(天若有情) 如何使用Session控制解决的?如果用转向,如何尽量减少停顿,使转向的页面不出现?(我只要提交数据,不需要反馈)Top
33 楼iwebsms(网信通)回复于 2005-02-06 21:54:56 得分 20
http://www.cnblogs.com/webcool/archive/2005/02/02/100682.htmlTop
34 楼tonybaobao(Tony宝宝)回复于 2005-02-06 23:58:10 得分 20
摘录自http://blog.joycode.com/lostinet/
---------------------------------------
把这个作为 <-script src=.....js-><-/script-> 的形式Render到每个页面中就可以了。|
如果有PageBase,则在Init的时候用RegisterClientScriptBlock放上去更好。
因为客户没有抱怨过,所以也没有改进过。
function _doPostBack(){};
if(typeof("__doPostBack")=="function")
{
_doPostBack=__doPostBack;
__doPostBack=_doPostBackNew;
}
document.attachEvent("onmousemove",_onmousemove);
var _isPosting=false;
var _divMask=null;
function _onmousemove()
{
if(_divMask)
with(_divMask.runtimeStyle)
{
left=event.clientX+document.body.scrollLeft-4;
top=event.clientY+document.body.scrollTop-4;
}
}
function _makeMask()
{
var div=document.createElement("DIV");
with(div.runtimeStyle)
{
position="absolute";
zIndex=999999;
fontSize="1px";
left=event.clientX+document.body.scrollLeft-4;
top=event.clientY+document.body.scrollTop-4;
width="8px";
height="8px";
cursor="wait";
backgroundColor="gray";
filter="alpha(opacity=10)";
}
try
{
document.body.insertAdjacentElement("BeforeEnd",div);
div.onblur=new Function("this.focus()");
div.focus();
}
catch(x){}
if(_divMask)_divMask.removeNode(true);
_divMask=div;
}
function _doPostBackNew(sender,args)
{
if(_isPosting)
return event.returnValue=!(event.cancelBubble=true);
status="正在更新页面...";
_doPostBack(sender,args);
_isPosting=true;
_makeMask();
}
function _onformsubmit()
{
if(_isPosting)
return event.returnValue=!(event.cancelBubble=true);
_isPosting=true;
_makeMask();
}
new function _attachForms()
{
with(new Enumerator(document.forms))
for(;!atEnd();moveNext())
{
item().attachEvent("onsubmit",_onformsubmit);
var div=document.createElement("div");
div.runtimeStyle.width="0px";
div.runtimeStyle.hight="0px";
div.runtimeStyle.overflow="hidden";
div.runtimeStyle.position="absolute";
item(0).insertAdjacentElement("afterbegin",div);
div.innerHTML="<INPUT TYPE=Submit name='webformpatchsubmitelement' onclick='return event.returnValue=false' id='webformpatchsubmitelement' value='webformpatchsubmitelement'/>";
}
}
Top




