检测页面刷新jQuery或C#ASP.Net

时间:2010-03-15 02:31:47

标签: c# asp.net jquery refresh

我正在寻找一种在我的C#代码中检测页面是否已刷新的方法(f5)。

首先,我不知道jQuery / JavaScript解决方案是否比完全C#ASP.Net更好。所以...第一个问题是:什么会让你选择一个而不是另一个?

第三,也是最重要的部分,如果有人能帮助我。一些好的教程,或文章......任何东西。我尝试了一些解决方案......但也许,因为我缺乏知识,他们没有工作。

提前致谢。


更新1

我尝试使用Hightechrider解决方案,因为它似乎很容易实现。所以我输入了这段代码:

public bool IsRefresh { get; set; }

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);

    IsRefresh = false;
    if (Page.Request.AppRelativeCurrentExecutionFilePath == Profiles.User.LastPageUrl &&
        !Page.IsPostBack)
        IsRefresh = true;
}

PS:Profiles.User.LastPageUrl是我为其他目的创建的会话变量,但是满足了这一需求。所以这不是一些内置属性。

然而,在经过几次测试后,我得出的结论是页面可能同时是PostBack和Refresh。因为用户可以按下按钮,然后点击刷新。因此,由于!Page.IsPostBack,这种情况使我之前的代码无效。 我仍然在寻求一个简单直接的解决方案。

3 个答案:

答案 0 :(得分:1)

据我所知,大多数浏览器的浏览器刷新都不会发送任何特殊信息来指示按下了刷新按钮。但是,有一些选择,具体取决于您要完成的任务。

我建议您阅读以下内容,看看它们是否可以帮助您获得所需的位置:

只是一种直觉,但上面的第二项可能是您需要的路径。有时,解决问题的最佳方法是消除问题。也就是说,构建解决方案,以便推送刷新首先不需要特殊处理。

至于Javascript(客户端)与ASP.NET(服务器端),我认为你可能会结合两者的组合,而不是两者或。

答案 1 :(得分:1)

把它放到一个继承Page的基类中,这是在VB.Net中,不会太难转换为C#

    Private mRefreshState As Boolean
    Private mIsRefresh As Boolean

    Public ReadOnly Property IsRefreshFromPostBack() As Boolean
        Get
            Return mIsRefresh
        End Get
    End Property

    Protected Overrides Sub LoadViewState(ByVal savedState As Object)
        Dim allStates As Object() = DirectCast(savedState, Object())
        MyBase.LoadViewState(allStates(0))
        mRefreshState = Convert.ToBoolean(allStates(1))
        mIsRefresh = mRefreshState = Convert.ToBoolean(Session("__ISREFRESH"))
    End Sub

    Protected Overrides Function SaveViewState() As Object
        Session("__ISREFRESH") = mRefreshState
        Dim allStates(2) As Object
        allStates(0) = MyBase.SaveViewState()
        allStates(1) = Not mRefreshState
        Return allStates
    End Function

然后调用IsRefreshFromPostBack属性以确定是否按下了F5。令人惊奇,我已在许多应用程序中使用

答案 2 :(得分:0)

您可能还记得会话状态中的最后一页,如果请求与您知道它已被刷新的页面相同。将此代码放在基页类的OnInit方法中(假设您有一个基页类)。检查它不是PostBack。