问题描述
我在控制器类的属性上使用 [TempData]
属性,例如:
public class FooController : Controller
{
[TempData]
public string ReturnUrl { get; set; }
....
}
并在处理 GET 请求的 Index 操作中设置此值:
public IActionResult Index(string returnUrl = null)
{
this.ReturnUrl = returnUrl;
// Do stuff...
return View();
}
我有第二个操作处理从第一个(索引)操作引发的 POST 请求,在这里我需要读取 TempData
值:
[HttpPost]
public IActionResult HandlePost(int id)
{
// Do post things...
// Read value from [TempData] backed property
string returnUrl = this.ReturnUrl;
return this.Redirect(returnUrl);
}
但是我发现 ReturnUrl
属性的值始终为 null
。
但是如果我像这样直接使用 TempData
:
// Set return url
TempData["returnUrl"] = returnUrl;
和
// Get return url
string returnUrl = TempData["returnUrl"] as string;
它工作正常 - 我是否错误地使用了该属性?可以这样使用[TempData]
吗?
解决方法
我可以通过 this.ReturnUrl
获取 returnUrl,这是一个演示:
控制器:
public class Test1Controller : Controller
{
[TempData]
public string ReturnUrl { get; set; }
public IActionResult Index(string returnUrl)
{
this.ReturnUrl = returnUrl;
return View();
}
[HttpPost]
public IActionResult HandlePost()
{
string returnUrl = this.ReturnUrl;
return Ok();
}
}
Index.cshtml:
<form method="post" asp-action="HandlePost">
<input type="submit" value="submit"/>
</form>
网址:
https://localhost:44355/Test1?returnUrl=ssss