Как отобразить значения словаря в Razor View (MVC) - PullRequest
0 голосов
/ 07 ноября 2018

Извините, я новичок в словарях и передаю их на экран

У меня есть все данные, необходимые для отправки в View.

Внутри ViewModel, это настройка словаря

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 голосов
/ 07 ноября 2018

Причина в том, что для словаря требуется реализация Object.GetHashCode(). Поскольку ваш ключ имеет значение NULL, а 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 - Указанный ключ отсутствует в словаре

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...