KeyNotFoundException из файла cshtml

Я использую 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;

Есть идеи?

10000