【发布时间】:2009-02-19 22:00:20
【问题描述】:
我有一个名为 Login.ascx 的局部视图,其中包含我的登录框,我在整个站点的许多页面上都包含这些框。当信息正确时它工作正常,但我正在尝试进行验证,所以如果登录信息不正确,我想将用户重定向回他们之前所在的视图,以向他们显示登录错误。什么是正确的说法,回到你来自的观点?
【问题讨论】:
标签: asp.net asp.net-mvc
我有一个名为 Login.ascx 的局部视图,其中包含我的登录框,我在整个站点的许多页面上都包含这些框。当信息正确时它工作正常,但我正在尝试进行验证,所以如果登录信息不正确,我想将用户重定向回他们之前所在的视图,以向他们显示登录错误。什么是正确的说法,回到你来自的观点?
【问题讨论】:
标签: asp.net asp.net-mvc
如果从任何页面登录失败,我想我会将他们引导到登录视图以查看错误,而不是上一页。与另一个页面上的登录控件相比,专用登录页面可能有更多的 UI 空间来显示错误等。话虽如此,您可能希望在 Login 操作中包含 returnUrl 参数,以便在登录实际成功时,将用户引导回他们曾经(或试图到达)的地方。
【讨论】:
听起来,与其问我是怎么做到的,不如问自己为什么我要这样做。也许这是一个设计决策,而不是技术问题。
但如果您真的要为多个登录页面设置一个控制器操作,您可以尝试...
return Redirect(Request.UrlReferrer.ToString());
或者将路由名称保留在 TempData 中,只使用 RedirectToRoute(TempData["LoginRoute"]);
不过,这两种解决方案的代码味道都很糟糕。
请注意,如果您不检查跨站点注入,则只会引用其他站点。您可能需要对引用 URL 进行一些验证。
【讨论】:
对于AccountController 的内置Login 方法,有一个名为returnUrl 的参数,您可以这样使用:
Return Redirect(returnUrl);
或
Return RedirectToAction(returnUrl);
如果您将returnUrl 参数指定为有效的操作链接。
我最近遇到了类似的问题 - 你也许能找到一些东西 here...
【讨论】: