2

我发现如果您按 F5 或从浏览器窗口刷新,最后一个事件会再次触发。例如。我点击了一个按钮,按钮事件正常执行,但如果我从浏览器窗口按 F5,则再次触发相同的事件。

有人有什么想法吗?

感谢您分享您宝贵的时间。

4

3 回答 3

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;}
于 2009-10-13T08:15:23.860 回答
4

如果您想在回发发生后完全刷新页面以便它不会再次触发,您可以 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(); 
}
于 2011-02-24T17:57:23.870 回答
1

这不是一个错误。这是设计使然。

当您按下 F5/Refresh 时,它会再次向服务器发送相同的请求。

于 2009-10-13T08:07:04.280 回答