如何在Razor视图(MVC)中显示字典值

时间:2018-11-07 01:41:43

标签: asp.net-mvc dictionary razor

对不起,我是Dictionary的新手,并将其传递到视图中

我有所有需要发送到View的数据。

在ViewModel内部,这是Dictionary设置

public virtual Dictionary<int?, ImageListItemDto> ImageDictionary { get; set; }

在视图中,我正在查看是否存在某些键值对。

@if (Model != null & Model.ImageDictionary != null && !String.IsNullOrEmpty(Model.ImageDictionary[0].ImageDetail))
{
    <div>@Model.ImageDictionary[0].ImageDetail</div>
}
else
{
    <div>ImageDetails are not there</div>
}

我不想在for循环中显示每个“ ImageDetail”。如果索引为0,则此方法工作正常,否则会收到错误消息“字典中不存在给定的键。”

如果密钥不存在,是否不应该通过其他密钥?

谢谢

1 个答案:

答案 0 :(得分:0)

原因是Dictionary需要实现Object.GetHashCode()。由于您的键是可空的,并且null没有任何实现,因此也没有HashCode。

有多种方法可以安全地迭代字典。我也不是View中所有计算的忠实拥护者,但是在这里:

@if (Model != null & Model.ImageDictionary != null)
{
    foreach(KeyValuePair<string, string> dictValue in Model.ImageDictionary)
    {
       viewData["key"] = dictValue.Key;
       viewData["value"] = (Dictionary<int?, ImageListItemDto>)Model.ImageDictionary.ContainsKey(dictValue.Key) ? (Dictionary<int?, ImageListItemDto>)Model.ImageDictionary[dictValue.Key] : string.Empty;
    }
}

在这里阅读有关错误的有用信息:

C# Dictionary - The given key was not present in the dictionary