登录后返回URL无法正常工作

时间:2012-03-04 14:22:40

标签: asp.net-mvc asp.net-mvc-3

我正在研究asp.net MVC 3应用程序。该应用程序的一个主页,有一些链接重定向到登录页面,如下所示:

 <a href="Home/Login?returnUrl=/Disputes/Index"> Disputes </a>

登录操作方法是这样的:

  public ActionResult Login() 
        {
return view();
        }

在登录视图上我有一个像这样的部分视图:

 @Html.Partial("_LogOn", new LogOnModel { Type = LogOnTypeEnum.Obligor })

和_LogOn部分是这样的:

在顶部是这样的:

@{
    string retUrl = "";
    if (ViewContext.HttpContext.Request.UrlReferrer != null)
    {
        retUrl =
          ViewContext.HttpContext.Request.UrlReferrer.PathAndQuery;
    }             
}

和表单看起来像这样:

@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { autocomplete = "off", id = "frmLogin", Type = 2, model = this.Model, returnUrl = Request.QueryString["ReturnUrl"] }))

最后登录帐户控制器的方法:

 public ActionResult LogOn(LogOnModel model, string returnUrl)

{
// I want to redirect to localhost:2304//myapp/returnurl but returnurl is empty

}

我正在关注此示例(它不使用部分视图,因为我正在使用)

http://visualstudiounleashed.com/mikesnell/post/2011/08/16/Using-the-ASPNET-MVC-3-Logon-returnUrl-Parameter.aspx

2 个答案:

答案 0 :(得分:1)

请勿使用UrlReferrer获取返回网址。相反,将其作为GET操作方法的参数:

public ActionResult Login(string returnUrl) 
{
    return View(new LogOnModel { ReturnUrl = returnUrl });
}

您的LogOnModel必须具有ReturnUrl属性,我们使用:

[HiddenInput(DisplayValue = false)]
public string ReturnUrl { get; set; }

然后,当用户发布表单时,请确保ReturnUrl进入您的POST操作方法:

@Html.EditorFor(m => m.ReturnUrl)

public ActionResult LogOn(LogOnModel model)
{
    // on logon success, redirect to model.ReturnUrl
}

答案 1 :(得分:0)

我在MVC 5中遇到了这个问题,因此在MVC 3中可能无济于事。

这是因为我试图为returnUrl进行编码,但是已经在您的控制器中对其进行了配置。如果您在登录操作中查找,则存在一个redirectToLocal属性,该属性将操作重定向到您的本地帐户控制器登录操作。您所要做的就是将AUTHORIZE类放在Controller Action上方,因此:

<Authorize>
    Function Create() As ActionResult
        Return View()
    End Function