如何将RedirectUrl从Create action GET传递给POST

时间:2018-02-19 00:12:00

标签: asp.net-core-mvc

我尝试传递从RedirectUrl操作到[Authorize]操作时用GET修饰操作时填充的POST值。

当我使用TempDataViewBag时,隐藏的INPUT元素未填充。

/Credential/Create GET

public IActionResult Create(string returnUrl = null)
{
    // either option has the same effect
    //TempData["returnUrl"] = returnUrl;
    ViewBag.ReturnUrl = returnUrl;

    return View();
}

结果HTML:

<input type="hidden" name="returnUrl" />

如果我提供ViewModel:

public IActionResult Create(string returnUrl = null)
{
    // either option has the same effect
    //TempData["returnUrl"] = returnUrl;
    ViewBag.ReturnUrl = returnUrl;

    CredentialViewModel credential = new CredentialViewModel();
    return View(credential);

}

然后输入包含视图模型的类名:

<input type="hidden" name="returnUrl" value="Foo.Models.ViewModels.CredentialViewModel" />

我做错了什么?

/Credential/Create POST

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("EmailAddress,Password")] CredentialViewModel credential, string returnUrl = null)
{
    // null
    Console.WriteLine(returnUrl);
}

1 个答案:

答案 0 :(得分:1)

只需使用:

<input type="hidden" name="returnUrl" value="@Context.Request.Query["returnUrl"].SingleOrDefault()" />

然后,您甚至不需要设置ViewBag