我尝试传递从RedirectUrl
操作到[Authorize]
操作时用GET
修饰操作时填充的POST
值。
当我使用TempData
或ViewBag
时,隐藏的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);
}
答案 0 :(得分:1)
只需使用:
<input type="hidden" name="returnUrl" value="@Context.Request.Query["returnUrl"].SingleOrDefault()" />
然后,您甚至不需要设置ViewBag
。