【问题标题】:on clicking browser back button redirect to an action method in mvc单击浏览器后退按钮时重定向到 mvc 中的操作方法
【发布时间】:2015-07-09 00:11:17
【问题描述】:

我是 mvc 应用程序的新手,我使用的是 MVC 5 版本。我现在面临的情况是,如果我在应用程序内的任何网页内单击浏览器后退按钮,则应显示登录页面,而不是显示任何缓存页面。

我在 global.asax 中添加了下面的代码来清除缓存。所以一段时间后,如果清除缓存并单击返回按钮,则会显示过期页面。

protected void Application_BeginRequest(){
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
            Response.Cache.SetNoStore();
    }

如果在应用程序中单击浏览器后退按钮,我的意图是在任何时间点显示登录操作方法。请帮帮我..

【问题讨论】:

  • 嗯,这是客户关心的问题。在服务器上做是不可靠的。当缓存被清除并且我点击一个链接时会发生什么?
  • 如果链接被点击,那么相应的动作方法将被调用并且会正常工作。如果浏览器后退按钮被点击我需要重定向调用登录动作方法。

标签: asp.net-mvc


【解决方案1】:

在我看来,这绝不应该这样做。 浏览器上的后退按钮是客户端/用户操作,它具有特定的行为。你不应该尝试改变这样的事情。

但是,如果您想做一些根据用户的看法会非常糟糕的事情,这完全取决于您。 您可以做的是在 JavaScript 或 jquery 中使用 unload 事件。这不仅会让您知道何时按下后退按钮,还会让您知道何时离开页面。

我在处理数据输入表单时使用它来确认在用户输入数据而不保存后导航离开。

当用户离开页面时,unload 事件被发送到窗口元素。这可能意味着许多事情之一。用户可以单击链接离开页面,或者在地址栏中输入新的 URL。前进和后退按钮将触发事件。关闭浏览器窗口将导致事件被触发。即使是页面重新加载也会首先创建一个卸载事件。

http://api.jquery.com/unload/

$( 窗口 ).unload(function() { return "调用 .unload() 的处理程序。"; });

我认为现在您会考虑区分导致卸载事件的原因。但这是不可能的,至少不是以跨浏览器的方式并且没有任何黑客攻击。您可以参考此链接了解更多详情 - Is there a way in javascript to detect if the unload event is caused via a refresh, the back button, or closing the browser?

更新 (从另一个 SO 答案复制):

由于您这样做是出于注销目的,因此您可能应该在服务器上使用一个时间戳变量,该变量会随每个请求(或使用 ajax-ping)而更新,如果用户没有看到它,则注销该用户指定时间。

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2012-01-01
    • 2011-09-15
    • 1970-01-01
    • 2020-09-12
    • 2011-08-30
    相关资源
    最近更新 更多