Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从列表隐式强制转换的TempData值<;字符串>;重定向到操作()后的字符串[]_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 从列表隐式强制转换的TempData值<;字符串>;重定向到操作()后的字符串[]

C# 从列表隐式强制转换的TempData值<;字符串>;重定向到操作()后的字符串[],c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我使用TempData允许在重定向后显示错误消息。为了兼容性,我使用列表将消息添加到NotificationHelper类中的错误列表中: if (TempData["errorNotification"] == null) { TempData["errorNotification"] = new List<string> { message }; } else { var data = (List<string>) TempDa

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

if (TempData["errorNotification"] == null) {
    TempData["errorNotification"] = new List<string> {
        message
    };
} else {
    var data = (List<string>) TempData["errorNotification"];
    data.Add(message);
    TempData["errorNotification"] = data;
}
问题是为了使用数据,我在视图中强制转换类型,如下所示:

var errorMessages=TempData[“errorNotification”]作为列表

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

var errorMessages=TempData[“errorNotification”]作为字符串[]


由于预期类型错误(取决于我是在重定向之前还是之后渲染视图),上述强制转换之一将返回为null。这是TempData想要的行为吗?如何确保视图可以预期提供一种特定类型?

如果要保留该类型,请先序列化字符串列表,然后将其分配给
TempData
,然后在检索时反序列化。这就是我最后做的。虽然在我的例子中,我最终存储了
NotifyEntry
的列表,而不是
字符串的列表

public class NotifyEntry
{
    public NotifyType Type { get; set; }
    public string Text { get; set; }
}

public enum NotifyType
{
    Success,
    Information,
    Warning,
    Error
}

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

因此,在视图中,我没有尝试猜测它是列表还是数组,而是使用
IEnumerable
来解释这两种情况:

var errorMessages = TempData["errorNotification"] as IEnumerable<string>;
var errorMessages=TempData[“errorNotification”]作为IEnumerable;

您可以始终使用
var errorMessages=TempData[“errorNotification”]作为IEnumerable但无论如何,您确实不应该在视图中使用该代码(您应该将其指定给视图模型属性(或
ViewBag
属性)在控制器中method@StephenMuecke感谢您的输入。我假设您指的是返回视图的方法,因为据我所知,这就是ViewBag的工作原理。不过,此通知背后的想法是,无论重定向如何,它都将显示出来,因此,当我使用AddErrorNotification方法时,我不必有任何信息关于哪个视图将显示它。这是一个有趣的工作。但是,你知道它是否“正确”吗行为还是将列表转换为数组的错误?感谢您的输入-我决定在视图中使用IEnumerable,在那里我读取TempData,因为我不会以任何方式更改该数据。TempData本质上只是
KeyValuePair
的集合,因此存储完整对象没有问题。尽管现在我想起了我以前的决定,我试图记住为什么我要先发制人地序列化我的值,但我记不起原因。我必须尝试直接存储它,而不进行序列化,看看是否有任何东西弹出来提醒我为什么这样做…:-P
var errorMessages = TempData["errorNotification"] as IEnumerable<string>;