returnUrl参数未传递给LogOn操作的Post方法

时间:2012-07-25 08:37:58

标签: asp.net-mvc-3 razor

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

控制器操作

 [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......
  }

问题: 在LogOn View中,当我没有在Html.BeginForm()中放置参数时,它可以正常工作。登录后,页面将重定向到页面,用户将重定向到登录进行身份验证。但如果我按上述方式传递参数,登录后会重定向到主页。这里,可能是由于returnUrl未传递给LogOn操作。如何在Html.BeginForm中传递returnUrl参数以进行LogOn操作。或者,是否可以在不更改视图和修改LogOn操作的情况下进行操作,这样我就不必更改其他视图的代码。谢谢你的时间......

2 个答案:

答案 0 :(得分:0)

您可以在操作中使用Request.UrlReferrer来获取最后一个请求的网址。

答案 1 :(得分:0)

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

@{
    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 }))
{
}