ReturnUrl QueryString在MVC 4中始终为null

use*_*508 3 asp.net-mvc

我有一个使用get方法登录的操作方法:

public virtual ActionResult LogIn()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

以及使用Ajax.BeginForm()在Ajax调用中发布的Post方法的动作方法,如:

[HttpPost]
[AjaxOnly]
[ValidateAntiForgeryToken]
public virtual ActionResult LogIn(LogInViewModel loginInfo, string returnUrl)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

但returnUrl总是为空!

我使用MVC 4.

这个问题的原因是什么?

jwa*_*zko 8

您必须将returnUrl发送回服务器.例如,您的登录表单应将returnUrl作为参数:

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
    ....
    <input type="submit" value="Log in" />
}
Run Code Online (Sandbox Code Playgroud)

以前在登录操作中保存在服务器端的,由于在查询字符串中传递了ReturnUrl而使用AuthorizeAttribute而调用:

public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View();
}
Run Code Online (Sandbox Code Playgroud)