gpt4 book ai didi

c# - TempData 值在 RedirectToAction() 之后从 List 隐式转换为 string[]

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:07 26 4
gpt4 key购买 nike

我正在使用 TempData 以允许在重定向后显示错误消息。为了兼容性,我使用 List<string>将消息添加到 NotificationHelper 类的错误列表中:

if (TempData["errorNotification"] == null) {
TempData["errorNotification"] = new List<string> {
message
};
} else {
var data = (List<string>) TempData["errorNotification"];
data.Add(message);
TempData["errorNotification"] = data;
}

在 Controller 内部,我在 return RedirectToAction() 之前用错误消息填充了 TempData。调用,TempData 包含一个带有 List<string> 的字典记录(准确地说:System.Collections.Generic.List`1[System.String])作为一个值,但在调用之后,在 Terms() 内部函数,值变成一个数组(System.String[])。

[HttpGet]
public IActionResult Terms()
{
return View();
}

[HttpGet]
public IActionResult Index()
{
NotificationHelper.AddErrorNotification("error!", TempData);
return RedirectToAction("Terms");
}

问题是为了使用数据,我像这样在 View 中转换类型:

var errorMessages = TempData["errorNotification"] as List<string>;

在转换之后我必须改为这样做:

var errorMessages = TempData["errorNotification"] as string[];

上述转换之一将返回为 null,因为预期类型错误(取决于我是否尝试在重定向之前或之后呈现 View )。这是 TempData 的期望行为吗?我如何确保 View 可以预期提供一种特定类型?

最佳答案

我最终使用了 IEnumerable,正如@Stephen Muecke 所建议的那样,因为我只是在寻找迭代数据而不是扩展或更改它。

因此在 View 中,我没有尝试猜测它是列表还是数组,而是使用 IEnumerable 来说明两者:

var errorMessages = TempData["errorNotification"] as IEnumerable<string>;

关于c# - TempData 值在 RedirectToAction() 之后从 List<string> 隐式转换为 string[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com