CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

如何防止页面刷新???

楼主fellingsky(天若有情)2005-01-31 10:57:42 在 .NET技术 / ASP.NET 提问

当执行按钮操作后,再按刷新,网页还是再次提交刚才的动作。如何才能防止页面刷新呢?查了以前的好多帖子,但都没能解决 问题点数: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

相关问题

  • 如何防止用户更新页面刷新计数器!
  • 在asp中如何防止页面被刷新
  • 请教:如何防止页面刷新造成的数据重复提交?
  • showModalDialog刷新页面(不同参数),如何防止重新打开新窗口
  • 页面如何刷新?
  • 如何刷新页面?
  • 如何刷新页面?
  • 如何刷新页面
  • 如何刷新页面?
  • 如何刷新本页面?

关键词

  • asp.net

得分解答快速导航

  • 帖主:fellingsky
  • dcren118
  • morality
  • 91bct
  • iwebsms
  • tonybaobao

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo