实用程序类中的 TempData 返回 null

问题描述 投票:0回答:1

我正在开发 ASP.NET Core 6.0。我必须在我的实用程序类中使用

TempData
。因此,我从
ITempDataDictionaryFactory
获取它,如 如何在我自己的实用程序类中访问 TempData?或者构造函数中 TempData 为 null

在我的代码中,我将

List<string>
分配给
TempData
。当我尝试访问它时,出现空值错误。我的代码如下所示。

这就是我在

List<string>
中创建和设置
tempData
的方法:

var tempData = _tempDataDictionaryFactory.GetTempData(httpContext);

if (tempData["InvalidLoginNames"] is null)
{
    var InvalidLoginNames = new List<string>();
    InvalidLoginNames.Add(username.Trim());
    tempData["InvalidLoginNames"] = InvalidLoginNames;
}

这就是我尝试获取价值的方法:

var temp = tempData["InvalidLoginNames"] as List<string>;

当我尝试从 temp 获取保存的值时,它会抛出错误,因为它为空。有趣的是,当我在调试过程中忽略它时,它具有价值。

c# asp.net-core asp.net-core-mvc
1个回答
0
投票

当我尝试从 temp 获取保存的值时,它会抛出错误 无效的。有趣的是,当我在调试期间超过它时,它有 值。

嗯,您共享的链接已使用控制器上下文或特定服务作为依赖项。如果您的实用程序类需要频繁访问 TempData 并且与特定控制器紧密耦合,请考虑将控制器本身作为依赖项注入。

此外,根据您的共享代码,实用程序类可能会在控制器操作的直接上下文之外被调用。如果您能分享完整的实现,那就更方便了。

但是,您无法检索该值的原因是所有都不是持久数据容器。一旦操作被重定向,数据将不再位于 Tempdata、viewdata 或 viewbag 中,这些只是一次。

为了将数据从一个操作保留到另一个操作,即使在页面重定向之后,您也可以将实用程序作为依赖项注入,或者通过使用会话状态来处理它,这是数据持久性的最简单方法,或者可以保持数据只要你想要。

© www.soinside.com 2019 - 2024. All rights reserved.