Asp.net mvc 3 returnUrl参数未传递到登录操作的Post方法

Asp.net mvc 3 returnUrl参数未传递到登录操作的Post方法,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,当用户尝试访问经过身份验证的页面时,它将重定向到登录页面。以下是登录操作: 控制器动作 [HttpPost] public ActionResult LogOn(LogOnModel model, string returnUrl) { //Authentication codes goes here ....... } 登录视图: @using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { @

当用户尝试访问经过身份验证的页面时,它将重定向到登录页面。以下是登录操作:

控制器动作

 [HttpPost]
  public ActionResult LogOn(LogOnModel model, string returnUrl)
  {
    //Authentication codes goes here .......
  }
登录视图

  @using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new {  @class = "jmenu" }))
   {
     // Form for login codes goes here......
  }
问题:
在登录视图中,当我没有将参数放入Html.BeginForm()中时,它可以正常工作。该页面在登录后被重定向到该页面,在该页面中,用户被重定向到登录以进行身份验证。但是,如果我像上面那样传递参数,那么在登录之后,它将被重定向到主页。在这里,这可能是因为returnUrl没有传递给登录操作。如何在Html.BeginForm中传递returnUrl参数以进行登录操作。或者,是否可以不更改视图并在登录操作中进行修改,这样我就不必更改其他视图的代码。感谢您抽出时间…

您可以在操作中使用
Request.urlReferer
获取最后一个请求的URL。

您需要将返回URL定义为表单的一部分。需要注意的一点是,您不能总是依赖url引用者。在某些情况下,它可能为空

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

@using (Html.BeginForm("Logon", "Account", new { model = this.Model, returnUrl = url }))
{
}
试试这个