我发现如果你按F5或从浏览器窗口刷新,最后一个事件会再次触发。对于前者我点击了按钮事件正常执行的按钮,但如果我从浏览器窗口按F5,则会再次触发相同的事件。
有人有任何想法吗?
感谢您分享宝贵的时间。
答案 0 :(得分:5)
根据NinenthSense,这就是用户刷新页面时浏览器的反应。
如果您仍想限制,可以使用下面的某些javascript
//to avaoid pressing F5 key
document.onkeydown = function()
{
if(event.keyCode==116) {
event.keyCode=0;
event.returnValue = false;
}
}
//to avoid refresh, using context menu of the browser
document.oncontextmenu = function() {event.returnValue = false;}
答案 1 :(得分:4)
如果您想在回发发生后完全刷新页面,以便它不会再次触发,您可以将Response.Redirect转到同一页面。
Response.Redirect(Request.Url.AbsoluteUri);
这基本上会占用你的整个查询字符串并将浏览器发回给它,清除过程中的任何帖子。我经常在Save()例程之后执行此操作以使页面恢复到“正常”状态。如果您的保存例程正在更新数据库,并且您在页面上有一些从数据库中读取的UI元素,那么这也可以很好地工作,那么您不必担心使用新数据重新加载这些元素。 / p>
此外,你可以添加一个Extension方法来快速点击这个:
public static class Extensions
{
public static void Reload(this Page page)
{
page.Response.Redirect(page.Request.Url.AbsoluteUri);
}
}
然后在代码中调用此方法,如下所示:
private void SaveCrap()
{
SavemeBlahBlah(); // save to dbase
this.Page.Reload();
}
答案 2 :(得分:1)
这不是一个错误。这是设计的。
当您按F5 / Refresh时,它会再次向服务器发送相同的请求。