我正在开发 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 获取保存的值时,它会抛出错误,因为它为空。有趣的是,当我在调试过程中忽略它时,它具有价值。
当我尝试从 temp 获取保存的值时,它会抛出错误 无效的。有趣的是,当我在调试期间超过它时,它有 值。
嗯,您共享的链接已使用控制器上下文或特定服务作为依赖项。如果您的实用程序类需要频繁访问 TempData 并且与特定控制器紧密耦合,请考虑将控制器本身作为依赖项注入。
此外,根据您的共享代码,实用程序类可能会在控制器操作的直接上下文之外被调用。如果您能分享完整的实现,那就更方便了。
但是,您无法检索该值的原因是所有都不是持久数据容器。一旦操作被重定向,数据将不再位于 Tempdata、viewdata 或 viewbag 中,这些只是一次。
为了将数据从一个操作保留到另一个操作,即使在页面重定向之后,您也可以将实用程序作为依赖项注入,或者通过使用会话状态来处理它,这是数据持久性的最简单方法,或者可以保持数据只要你想要。