【问题标题】:Detect browser refresh检测浏览器刷新
【发布时间】:2011-09-30 17:16:03
【问题描述】:

如何确定用户是否按 F5 刷新我的页面(类似于 SO 的实现方式。如果刷新页面,问题计数器不会增加)。我测试了许多教程中提到的许多代码 sn-ps,但没有一个能正常工作。

为了更清楚,假设我有一个空的 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!
}

【问题讨论】:

  • 你说'我可以使用会话变量'那为什么不只存储上次访问的页面呢?
  • 因为我必须将它存储在每个页面中。实际上,使用基本页面可能不是一个坏主意...

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


【解决方案1】:

我遇到了这个问题并使用以下代码。对我来说效果很好。

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();
    } 
}

【讨论】:

    【解决方案2】:

    唯一确定的解决方案是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

    【讨论】:

    • 您能解释一下“重定向到同一页面”吗?
    • @kamyar 我已经将代码项目的想法与一些额外的代码一起使用,但并不总是有效......很复杂。我知道重定向会丢失很多有用的消息数据...我知道...
    • @Kaymyar 发布后,一切正常,您进行 Responce.Redirect(Url.RawUrl, true);
    猜你喜欢
    • 2011-03-15
    • 2011-07-09
    • 2019-12-03
    • 2010-10-02
    • 1970-01-01
    • 2021-10-10
    • 2012-04-18
    • 2021-09-10
    • 2011-03-28
    相关资源
    最近更新 更多