m3h*_*h0w 4 c# asp.net-core-mvc asp.net-core
我正在使用 TempData 允许在重定向后显示错误消息。为了兼容性,我使用 aList<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;
}
Run Code Online (Sandbox Code Playgroud)
在控制器内部,我用错误消息填充该 TempData,在return RedirectToAction()调用之前,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");
}
Run Code Online (Sandbox Code Playgroud)
问题是为了使用数据,我在视图中转换类型,如下所示:
var errorMessages = TempData["errorNotification"] as List<string>;
转换后我必须这样做:
var errorMessages = TempData["errorNotification"] as string[];
由于预期类型错误(取决于我是否尝试在重定向之前或之后呈现视图),上述转换之一将返回为 null。这是 TempData 的理想行为吗?我如何确保视图可以期望提供一种特定类型?
IEnumerable正如@Stephen Muecke 所建议的那样,我最终选择了使用,因为我只是在寻找迭代数据而不是扩展或更改它。
因此,在视图中,我没有尝试猜测它是列表还是数组,而是IEnumerable将两者都考虑在内:
var errorMessages = TempData["errorNotification"] as IEnumerable<string>;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8819 次 |
| 最近记录: |