使用F5刷新页面时再次调用按钮单击事件

时间:2009-10-13 07:59:25

标签: asp.net page-lifecycle

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

有人有任何想法吗?

感谢您分享宝贵的时间。

3 个答案:

答案 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时,它会再次向服务器发送相同的请求。