我发现如果您按 F5 或从浏览器窗口刷新,最后一个事件会再次触发。例如。我点击了一个按钮,按钮事件正常执行,但如果我从浏览器窗口按 F5,则再次触发相同的事件。
有人有什么想法吗?
感谢您分享您宝贵的时间。
我发现如果您按 F5 或从浏览器窗口刷新,最后一个事件会再次触发。例如。我点击了一个按钮,按钮事件正常执行,但如果我从浏览器窗口按 F5,则再次触发相同的事件。
有人有什么想法吗?
感谢您分享您宝贵的时间。
根据 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;}
如果您想在回发发生后完全刷新页面以便它不会再次触发,您可以 Response.Redirect 到同一页面。
Response.Redirect(Request.Url.AbsoluteUri);
这基本上会占用您的整个查询字符串并将浏览器发送回它,清除此过程中的所有帖子。我经常在 Save() 例程之后执行此操作,以使页面恢复到“正常”状态。如果您的 Save 例程正在更新数据库,并且您在页面上有一些从数据库读取的 UI 元素,那么这也很有效,那么您不必担心使用新数据重新加载这些元素。
此外,您可以添加一个扩展方法来快速实现这一点,如下所示:
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();
}
这不是一个错误。这是设计使然。
当您按下 F5/Refresh 时,它会再次向服务器发送相同的请求。