Невозможно выполнить привязку во время выполнения к нулевой ссылке при назначении значения ViewBag в MVC - PullRequest
0 голосов
/ 17 марта 2020

У меня в настоящее время есть контроллер, который циклически просматривает мою базу данных «Сайты» и получает значение на основе идентификатора их сайта. Это выглядит так

 osiTotal[s.ID] = osiPartCost[s.ID] + osiCompCost[s.ID] + osiItemCost[s.ID];                 
 ViewBag.OSITotal[s.ID] = osiTotal[s.ID]; // Receive error message on this line

И тогда мой просмотр выглядит так

 @foreach (Site s in sites)
{
 <tr>
                <td style="font-weight : bold;">Total</td>
                <td style="font-weight : bold;">@ViewBag.OSITotal[s.ID]</td>
 </tr>
}

Но я получаю сообщение об ошибке

Невозможно выполнить привязку во время выполнения к нулевой ссылке

Я пытался сделать это, на мой взгляд

 @foreach (Site s in sites)
{
 <tr>
                <td style="font-weight : bold;">Total</td>
                <td style="font-weight : bold;">@ViewBag.OSITotal[1]</td>
 </tr>
}

Там, где я автоматически присваиваю @ViewBag.OSITotal значение «1», но все равно получаю ту же ошибку

Так что у меня возникает проблема, когда я пытаюсь присвоить значение osiTotal [s.ID ] в ViewBag

Почему это?

1 Ответ

1 голос
/ 18 марта 2020

Причины, по которым вызывается этот тип исключения:

Основы ViewBag - это динамический c тип. И вы получите исключение во время выполнения, а не во время компиляции. Поэтому вам лучше проверить, когда ваша MasterPage - страница загружена, у вас есть значения / значения HTTP в вашем запросе, которые будут такими же, как вам нужно. см. Эту ссылку

или

Viewbag.Title RuntimeBinderException вызвано базовым динамическим c объектом, который используется. Платформа. NET как-то всегда выдает эти исключения. см. Эту ссылку

Пример:

В контроллере:

Dictionary<int, string> sites = new Dictionary<int, string> { {0, "zero" }, { 1, "one" }, { 2, "two" } };
var osiTotal = new string[3] { "Manual", "Semi", "Auto" };
string[] temp = new string[osiTotal.Length];
foreach (var s in sites)
    temp[s.Key] = osiTotal[s.Key];
ViewBag.SiteData = temp;

Просмотр:

@{
    Dictionary<int, string> sites = new Dictionary<int, string> { { 0, "zero" }, { 1, "one" }, { 2, "two" } };
}
@foreach (var s in sites)
{
    <p>@ViewBag.SiteData[s.Key]</p>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...