1

这是一个很难解释的问题。

让我给你描述一个场景。

  1. 我有主页、注册页面、登录页面和仪表板页面
  2. 当我从注册页面注册申请并点击提交时。应用程序将处理请求,并在用户登录的情况下将我重定向到 Dashbord。现在,问题来了。当我按下后退按钮时。我得到了注册页面,其中的字段由值填充。这不应该发生。
  3. 当我登录系统并从仪表板登录时,我回击浏览器。它会显示我的登录页面。这也不应该发生。

我希望它能清楚地说明我在寻找什么。

我尝试过的几个可能的解决方案:

  1. 使用代理页面。类似于许多邮件服务正在做的事情。但在 MVC 3 中,它不会检测页面加载事件,并且对页面的控制非常少。
  2. 在代理页面 window.history.forward() 上使用 javascript 函数
  3. 代理页面一旦呈现就过期。

我并不完全相信上述解决方案。我希望以系统的方式和优雅的解决问题的方式获得一些最佳实践。

请帮助我就您正在使用的现有解决方案提出建议,以及您是否有一些出色的工作解决方案。请分享。

谢谢大家。

仅供参考。我正在使用 ASP.NET MVC 4 进行开发。

4

2 回答 2

0

在注册和登录页面的 Controller/Action 方法中,检查用户是否已经登录并重定向到例如。仪表板。

这样的事情取决于您如何进行身份验证。

public ActionResult Register()
{
  //If already logged in no need to show register page again
  if(Request.IsAuthenticated)
    return Redirec("Dashboard");

  return View();
}

编辑:更新了修复评论问题的答案

我创建了一个包含以下内容的部分视图

<input type="hidden" id="reloader" value="" />
<script type="text/javascript">
  if (document.getElementById("reloader").value === "reload")
      window.location.reload();
  else
      document.getElementById("reloader").value = "reload"
</script>

然后,您可以将其包含@Html.Partial('PartailViewName')在您的注册和登录视图中。

由于当您使用后退按钮时 DOM 被缓存,所以如果用户使用后退按钮,上面的脚本将重新加载页面。

如果与我的第一个答案一起使用,您将获得您想要的行为。

于 2012-10-14T07:25:50.690 回答
0

使用 history.js 来控制 history.back() 事件。您只需替换最后一页的状态以指向仪表板或您想要的页面(在您的 Web 应用程序内;出于安全原因,禁止跨域)。当用户单击后退按钮时,将加载定义的页面而不是登录页面。

https://github.com/browserstate/History.js/

代理解决方案对于这种 UI 交互来说太复杂了。客户端控制是您解决方案的最佳方法。HTML5 参考为此定义了 History API ( http://www.w3.org/TR/html5/history.html )。不幸的是,并不是所有的浏览器现在都实现了它。那是因为 history.js 脚本存在。

于 2012-10-14T06:52:54.920 回答