【问题标题】:Asp.Net Core TempData attribute - value is always nullAsp.Net Core TempData 属性 - 值始终为空
【发布时间】:2021-07-04 12:33:25
【问题描述】:

我在我的 Controller 类的属性上使用 [TempData] 属性,例如:

public class FooController : Controller
{
    [TempData]
    public string ReturnUrl { get; set; }
  
    ....
}

并在处理 GET 请求的索引操作中设置此值:

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]吗?

【问题讨论】:

  • 具有[TempData] 属性的控制器属性将仅由临时数据提供者分配一次值,因为为了分配属性值,提供者在访问临时数据字典时会从临时数据字典中删除该条目。这就是临时数据的工作方式。确保在 GET 和 POST 请求之间没有向您的控制器发出请求。对控制器的任何请求都将触发填充 temp 属性,从而删除条目。如果您想要更多控制权,请考虑使用memory cache
  • @Prolog - 是的,我认为这是问题所在。在 GET/POST 之间没有对控制器的任何请求但是单步执行代码我可以看到属性 getter 在 GET 请求之后被访问,这很奇怪,因为读取属性的唯一位置是POST ...知道为什么/如何触发getter吗?

标签: asp.net asp.net-mvc asp.net-core asp.net-core-3.1 tempdata


【解决方案1】:

我可以通过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

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2016-11-22
    • 2017-06-07
    相关资源
    最近更新 更多