检测浏览器刷新

时间:2011-07-07 18:31:07

标签: asp.net webforms refresh asp.net-4.0

如何确定用户是否按下了F5以刷新我的页面(类似于如何实施SO。如果刷新页面,问题计数器不会增加)。我已经测试了十几个教程中提到的许多代码片段,但都没有正常工作。

更清楚一点,假设我有一个空的Web表单,并想检测用户是否在客户端按下了F5(导致刷新未提交)。

我可以使用会话变量,但如果用户导航到我网站的另一个页面,然后回来,我想将其视为新访问,而不是刷新。所以这不是会话范围变量。

感谢。

更新:我能找到的唯一解决方法是从基页继承我的页面,覆盖下面的加载方法:

    public class PageBase : System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        this.Session["LastViewedPage"] = Request.RawUrl;
    }
}  

并且在每个页面中如果我有兴趣知道这是否是刷新:

if (this.Session["LastViewedPage"].ToString() == Request.RawUrl)
{
    // This is a refresh!
}

2 个答案:

答案 0 :(得分:4)

我遇到此问题并使用以下代码。它适用于我。

bool isPageRefreshed = false;

protected void Page_Load(object sender, EventArgs args)
{
    if (!IsPostBack)
    {
        ViewState["ViewStateId"] = System.Guid.NewGuid().ToString();
        Session["SessionId"] = ViewState["ViewStateId"].ToString();
    }
    else
    {
        if (ViewState["ViewStateId"].ToString() != Session["SessionId"].ToString())
        {
            isPageRefreshed = true;
        }

        Session["SessionId"] = System.Guid.NewGuid().ToString();
        ViewState["ViewStateId"] = Session["SessionId"].ToString();
    } 
}

答案 1 :(得分:1)

唯一可靠的解决方案是制作a redirect to the same page ,这是一个类似的问题:Post-Redirect-Get with ASP.NET

但也有一些其他技巧,通过在页面上添加一些票证并查看它是否相同或有更改,请参阅完整的示例和代码:

http://www.codeproject.com/Articles/68371/Detecting-Refresh-or-Postback-in-ASP-NET

还有一个:

http://dotnetslackers.com/community/blogs/simoneb/archive/2007/01/06/Using-an-HttpModule-to-detect-page-refresh.aspx