MVC登录表单未被重定向

时间:2012-02-09 06:16:57

标签: asp.net-mvc

实际上我已经从一个项目中复制了一个MVC 3系统,但现在看来我正在努力解决这个重定向问题

// POST:/ Account / LogOn

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                {
                    **return Redirect(returnUrl);**
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

所以,当我使用xxx.com/admin时,它需要我登录页面并按照上面的代码,但在成功的用户名和密码后,它应该重定向到管理主页,而不是。 任何人都可以有任何想法,这将有助于我继续。

干杯

2 个答案:

答案 0 :(得分:0)

像这样使用

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
  if (ModelState.IsValid)
  {
    if (Membership.ValidateUser(model.UserName, model.Password))
    {
      FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

      if (Url.IsLocalUrl(returnUrl))
      {
        return Redirect(returnUrl);
      }
      else
      {
        return RedirectToAction("Index", "Home");
      }
    }
    else
    {
      ModelState.AddModelError("", 
                            "The user name or password provided is incorrect.");
    }
  }
  // If we got this far, something failed, redisplay form

  return View(model);
}

答案 1 :(得分:0)

我一直遇到这个问题。您需要将returnUrl作为隐藏输入传递给表单,以便在登录POST上传回。

public ActionResult LogOn(returnUrl) {
   return View(returnUrl);
}

[HttpPost]
public ActionResult LogOn(LogOnModel input) {
  return Redirect(input.ReturnUrl);
}

问题是你在浏览器URL栏中看到returnUrl,但如果你看一下你的FORM动作,它可能只是转到“/ LogOn”。

您的另一个选择是将网址带到登录表单的操作中。

希望有所帮助。