我正在研究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
}
我正在关注此示例(它不使用部分视图,因为我正在使用)
答案 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