我有一个MVC5
项目和一个Razor
视图,向人们显示他们的登录名。我想要做的是给人们 Not me 选项以其他用户身份登录,然后重定向回此视图。
这是我目前所拥有的:
@if (Request.IsAuthenticated)
{
<div class="alert alert-dismissable alert-warning">
You are signed in as: @HttpContext.Current.User.Identity.Name
@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "" }))
{
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('logoutForm').submit()">Change</a>
}
</div>
}
唯一的问题是,在登录后,我希望用户自动重定向返回此页面而不是主页。我怎样才能做到这一点?谢谢。
答案 0 :(得分:1)
您可以在loggof方法中使用Request对象的UrlReferrer
属性来获取引用URL并将其传递给您的登录操作方法,并在成功登录后使用该方法重定向用户。
您可以将returnurl作为查询字符串传递给登录操作方法或使用TempData
。
[HttpPost]
public ActionResult LogOff()
{
var prevUrl = Request.UrlReferrer.AbsoluteUri;
//Do the things to end the session
return RedirectToAction("Login", new { returnUrl=prevUrl});
}
public ActionResult Login(string returnUrl="")
{
var loginVM=new LoginVM();
if(!String.IsNullOrEmpty(returnUrl))
loginVM.ReturnUrl=returnUrl;
return View(loginVM);
}
如果您更喜欢 TempData 方法
var prevUrl = Request.UrlReferrer.AbsoluteUri;
//Do the things to end the session
TempData.ReturnUrl=prevUrl;
return RedirectToAction("Login");
在Login
操作方法中,请从TempData
开始阅读。
确保您将LoginVM的ReturnURL
属性作为表单的一部分(在隐藏变量中),以便当用户发布登录表单时,它将在登录HttpPost中可用< / strong>行动方法
@model LoginVM
@using(Html.BeginForm())
{
// you other login form elements (username,password) here
@Html.HiddenFor(s=>s.ReturnUrl)
<input type="submit" />
}
并在您的 HttpPost 操作
中[HttpPost]
public ActionResult Login(LoginVM model)
{
//if login was successful, use model.ReturnUrl to redirect
}
答案 1 :(得分:0)
您需要在登录控制器和链接中做一些工作才能实现这一目标。基本上,您将把来自的页面作为参数传递给登录控制器,然后使用该链接在成功登录时将用户转发回该页面。
答案 2 :(得分:0)
在登录视图的Beginform中添加返回网址。
@using (Html.BeginForm("LoginActionABC", "LoginControllerABC", new { **ReturnUrl** = 'your url' }))
将新参数添加到LoginActionABC。
public ActionResult LoginActionABC(string returnUrl)
这可能会对你有所帮助
答案 3 :(得分:0)
这是我使用的代码,最终使用了这个代码。
在Razor视图中,我只需要添加一个带有returnUrl值的隐藏输入:
@if (Request.IsAuthenticated)
{
<div class="alert alert-dismissable alert-warning">
You are signed in as: @HttpContext.Current.User.Identity.Name
@using (Html.BeginForm("ChangeLogin", "Account", FormMethod.Post, new { id = "logoutForm", @class = ""}))
{
@Html.AntiForgeryToken()
<input type="hidden" name="returnUrl" value="/Item/Bid/@Model.ID" />
<a href="javascript:document.getElementById('logoutForm').submit()">Change</a>
}
</div>
}
在帐户控制器中,我添加了一个新方法来执行注销并使用返回URL重定向到登录页面:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ChangeLogin(string returnUrl)
{
AuthenticationManager.SignOut();
return RedirectToAction("Login", "Account", new System.Web.Routing.RouteValueDictionary { { "returnUrl", returnUrl } });
}
更改身份验证后,这会成功将用户导航回原始视图。非常感谢帮助我达到这一点的其他建议。