Button 单击了一次后. 按f5刷新又被执行一次?

cbting 2010-05-08 04:21:39
Button 单击了一次后. 按f5刷新又被执行以下? 有什么办法来解决 刷新执行的问题?
...全文
280 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
daydaysleep 2010-05-08
  • 打赏
  • 举报
回复
这很正常,是因为页面保持了它的操作的原因.
解决方法很简单,在操作完成后把自己刷新一次就可以了.要用代码刷新.
  • 打赏
  • 举报
回复
实际上,不是什么F5刷新,只要浏览器允许用户向后退,就会有更加严重的类似问题。
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 camperer 的回复:]
引用 1 楼 ciznx 的回复:
正常情况下刷新不会执行的啊

“正常情况下”会执行才对。。。
没啥好办法解决,抛弃服务器端控件,用ajax吧
[/Quote]

用ajax,在浏览器端被按F5刷新时,又会怎样呢?
  • 打赏
  • 举报
回复
由于服务器端的ViewState(不论是Cache还是磁盘上的)都被删除,于是就会在浏览器端恶意地重复提交相同的页面时抛出异常。
camperer 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ciznx 的回复:]
正常情况下刷新不会执行的啊
[/Quote]
“正常情况下”会执行才对。。。
没啥好办法解决,抛弃服务器端控件,用ajax吧
wuyq11 2010-05-08
  • 打赏
  • 举报
回复
浏览器的保护功能
是因为点击了服务器控件,再刷新时,就会提示重试或取消,把该操作用javascript来完成,复杂的操作可以用AJAX来完成
Response.Write(" <script>window.location.href='Test.aspx'; </script>");
http://topic.csdn.net/u/20090325/09/76b2590b-f4b8-420f-bee7-e4fdf77d78c6.html
  • 打赏
  • 举报
回复
歪打正着地,我写过的一个“在服务器端保存ViewState”的代码可以在客户端刷新时抛出异常:
using System;
using System.IO;
using System.Threading;
using System.Web.UI;

public class XVPage : Page
{
static private DirectoryInfo _Dir;

private DirectoryInfo Dir
{
get
{
if (_Dir == null)
{
_Dir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));
if (!_Dir.Exists)
_Dir.Create();
_Dir = new DirectoryInfo(Path.Combine(_Dir.FullName, "ViewState"));
if (!_Dir.Exists)
_Dir.Create();
}
return _Dir;
}
}

protected override object LoadPageStateFromPersistenceMedium()
{
PageStatePersister ps = this.PageStatePersister;
ps.Load();
if (ps.ControlState != null)
ps.ControlState = 反序列化对象((string)ps.ControlState);
if (ps.ViewState != null)
ps.ViewState = 反序列化对象((string)ps.ViewState);
return new Pair(ps.ControlState, ps.ViewState);
}

protected override void SavePageStateToPersistenceMedium(object state)
{
PageStatePersister ps = this.PageStatePersister;
if (state is Pair)
{
ps.ControlState = ((Pair)state).First;
ps.ViewState = ((Pair)state).Second;
}
else
ps.ViewState = state;
if (ps.ControlState != null)
ps.ControlState = 序列化对象(ps.ControlState);
if (ps.ViewState != null)
ps.ViewState = 序列化对象(ps.ViewState);
ps.Save();
}

private object 反序列化对象(string stateID)
{
if (stateID == null)
return null;

object state = Cache[stateID];
string fname = Path.Combine(Dir.FullName, stateID);
if (state != null)
{
ThreadPool.QueueUserWorkItem(h =>
{
Cache.Remove(stateID);
File.Delete(fname); //这个方法恰好可以禁止浏览器端的“刷新”。
});
return state;
}

return new ObjectStateFormatter().Deserialize(File.ReadAllText(fname));
}

static long seed1 = DateTime.Now.Ticks;
static ulong seed2 = 0;

private string 序列化对象(object obj)
{
string stateID = seed1.ToString() + "_" + (seed2++).ToString();
Cache.Insert(stateID, obj, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
string value = new ObjectStateFormatter().Serialize(obj);
ThreadPool.QueueUserWorkItem(h =>
{
File.WriteAllText(Path.Combine(Dir.FullName, stateID), value);
});
return stateID;
}
}
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ywjq 的回复:]
一个不是好办法的办法:设定一个COOKIE,执行前读取判断
[/Quote]
那么多个页面(例如不同窗口,或者不同iframe中的)就会冲突。
哈哈 2010-05-08
  • 打赏
  • 举报
回复
一个不是好办法的办法:设定一个COOKIE,执行前读取判断
geass 2010-05-08
  • 打赏
  • 举报
回复
重定向 Response.Redirect(Request.RawUrl)
mngzilin 2010-05-08
  • 打赏
  • 举报
回复
//防止缓存
Response.Buffer = true;
Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1);
Response.Expires = 0;
Response.CacheControl = "no-cache";
zcxverygood123456 2010-05-08
  • 打赏
  • 举报
回复
跳转到另外一个页面(告诉已经执行成功),有进度条(3秒),然后又回到当前页面
JIN20468320 2010-05-08
  • 打赏
  • 举报
回复
ispostback 你设置下断点就可以看出来了,要学会自己设置断点调试。
欢迎加入.NET 技术群 78817973 加强技术交流。
littlecc2009 2010-05-08
  • 打赏
  • 举报
回复
把比的page_load里的代码贴出来看看?
cbting 2010-05-08
  • 打赏
  • 举报
回复
//差评
protected void LinkButton2_Click(object sender, EventArgs e)
{

int id = int.Parse(Request.QueryString["id"]);
mp = bp.Getmod(id);
bool b = bp.Updatehuai(id, mp.Huai);
if (b)
{

Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('好评...!');</script>");
Bind();


LinkButton2.Enabled = false;



}


}
cm_boy 2010-05-08
  • 打赏
  • 举报
回复
这是[viewstates]的缘故。。建楼主看看页面的加载过程。。。
solovesnow 2010-05-08
  • 打赏
  • 举报
回复
理论上应该不会 代码贴出来看看 是不是有别的什么情况
ciznx 2010-05-08
  • 打赏
  • 举报
回复
正常情况下刷新不会执行的啊

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧