KeyNotFoundException из файла cs html - PullRequest
0 голосов
/ 15 января 2020

Я использую Razor в своем приложении asp. net. Из моего контроллера я вставил в ViewBag словарь, подобный этому:

Dictionary<int, RisposteUtente> mappaRisposte = (Dictionary<int, RisposteUtente>)Session["mappaRisposte"];
            if (mappaRisposte == null)
                mappaRisposte = new Dictionary<int, RisposteUtente>();
            ViewBag.mappaRisposte = mappaRisposte;

Так что я хочу получить значение этого словаря из файла cs html. Итак, я создаю этот код:

        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 ]

2 голосов
/ 15 января 2020

Ну, в сообщении об ошибке указано, что указанный ключ не найден. Скорее всего, вы передаете значение из x.rowId, которое недопустимо / не существует в словаре; это в основном похоже на ошибку индекса массива. Сначала проверьте, существует ли ключ:

var dictionary = ((Dictionary<int, AnalisiHRVElaborazioni.Models.Response.RisposteUtente>)ViewBag.mappaRisposte);
var oggetto = dictionary.ContainsKey(x.rowId) ? dictionary[x.rowId] : null;

У вас уже есть нулевая проверка, поэтому это должно решить вашу проблему.

0 голосов
/ 15 января 2020

Или вы можете использовать метод 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...