可以通过重定向来解决这个问题。在登录动作中,我们可以在重定向 URL 中添加一个参数来指定返回 URL,在登录成功后把用户重定向到该 URL。这样就可以避免 URL 在浏览器中重复显示。
示例代码如下:
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (!string.IsNullOrEmpty(returnUrl))
{
return RedirectToAction("Index", returnUrl);
}
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "用户名或密码不正确。");
}
}
return View(model);
}
在上面的代码中,我们在登录动作中传入了一个参数 returnUrl,它表示要返回的 URL。在登录成功后,如果 returnUrl 不为空,则我们通过 RedirectToAction 方法进行重定向。
注意,在重定向中,我们需要在第二个参数中指定返回 URL,如 RedirectToAction("Index", returnUrl)。这会将重定向 URL 设置为 /Controller/Action?returnUrl=,其中 returnUrl 参数值为传入的 returnUrl 参数。
因此,在返回视图中,我们可以在表单中添加一个隐藏字段来保存 returnUrl 参数,如下所示:
@using (Html.BeginForm("Login", "Account", new { returnUrl = ViewBag.ReturnUrl }, FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.LabelFor(m => m.UserName, new { @class = "control-label" })
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
@Html.LabelFor(m => m.Password, new { @class =
相关内容