Asp.Net Core TempData 属性 - 值始终为空

问题描述

我在控制器类的属性上使用 [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

结果: enter image description here