检测页面刷新 jQuery 或 C# ASP.Net
Posted
技术标签:
【中文标题】检测页面刷新 jQuery 或 C# ASP.Net【英文标题】:detect page refresh jQuery or C# ASP.Net 【发布时间】:2011-01-27 12:51:24 【问题描述】:我正在寻找一种在我的 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,这种情况使我以前的代码无效。 我仍在寻找一个简单直接的解决方案。
【问题讨论】:
【参考方案1】:据我所知,大多数浏览器的浏览器刷新不会发送任何特殊信息来指示刷新按钮被按下。但是,有一些选项,具体取决于您要完成的工作。
我建议阅读以下内容,看看它们是否能帮助您到达需要的地方:
Page.isPostback property Post-Redirect-Get Pattern只是一种直觉,但上面的第二项可能是您需要的路径。有时,解决问题的最佳方法是消除问题。也就是说,构建解决方案以使推送刷新一开始就不需要特殊处理。
至于 Javascript(客户端)与 ASP.NET(服务器端),我认为您最终可能会选择两者的某种组合,而不是非此即彼。
【讨论】:
【参考方案2】:把这个放到一个继承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。效果很好,我在很多应用中都使用过
【讨论】:
【参考方案3】:您可能会记住会话状态中的最后一页,并且如果请求与您知道它已被刷新的页面相同。将此代码放在基页类的 OnInit 方法中(假设您有一个基页类)。检查它也不是 PostBack。
【讨论】:
我觉得这个方案还是有问题的,因为页面可以同时回发和刷新。例如:如果用户进行回发,然后刷新......现在请求将是回发并刷新。 是的,但是你可以通过记住 Session 中的两个值来处理这个问题:最后一页,以及它是否是回发。你的问题有点不寻常——你为什么要这样做? 谢谢 4 你的回应。原因是:我有一个页面,用户可以在其中更新记录的状态。然后他单击一个显示“更改状态”的按钮,然后单击我向他显示一个模式对话框,上面写着:“状态已更新为公开”。如果用户刷新此页面,再次看到“status updated to public”是没有意义的。以上是关于检测页面刷新 jQuery 或 C# ASP.Net的主要内容,如果未能解决你的问题,请参考以下文章