Я использую Razor в своем приложении asp.net. Из моего контроллера я вставил в ViewBag словарь, подобный этому:
Dictionary<int, RisposteUtente> mappaRisposte = (Dictionary<int, RisposteUtente>)Session["mappaRisposte"];
if (mappaRisposte == null)
mappaRisposte = new Dictionary<int, RisposteUtente>();
ViewBag.mappaRisposte = mappaRisposte;
Поэтому я хочу получить значение этого словаря из файла cshtml. Итак, я создаю этот код:
var oggetto = ((Dictionary<int, AnalisiHRVElaborazioni.Models.Response.RisposteUtente>)ViewBag.mappaRisposte)[x.rowId];
if (oggetto != null)
{
<script>
alert("oggetto " + oggetto.valore);
</script>
}
Поэтому, если я пытаюсь запустить этот код, у меня появляется эта ошибка:
Exception detail: System.Collections.Generic.KeyNotFoundException: The specified key was not present in the dictionary.
Так как я могу справиться с этой ситуацией?
Всего 2 ответа
Что ж, в сообщении об ошибке указано, что указанный ключ не найден. Скорее всего, вы передаете значение из x.rowId
, которое недопустимо / не существует в словаре; это в основном похоже на ошибку индекса массива. Вы должны проверить, существует ли ключ первым:
var dictionary = ((Dictionary<int, AnalisiHRVElaborazioni.Models.Response.RisposteUtente>)ViewBag.mappaRisposte);
var oggetto = dictionary.ContainsKey(x.rowId) ? dictionary[x.rowId] : null;
У вас уже есть нулевая проверка на месте, поэтому это должно решить вашу проблему.
Или вы можете использовать метод TryGetValue
для проверки нулевого ключа.
вместо этого
var value = myDict[myKey];
изменить на
if (!myDict.TryGetValue(myKey, out data)) {
Debug.LogError("myDict doesn't have the value");
}
else {
//do whatever you were planning to do
}
в твоем случае
var myDict = (Dictionary<int, RisposteUtente>)ViewBag.mappaRisposte;
var oggetto = myDict.TryGetValue(x.rowId, out data) ? data : null;