ASP.NET MVC 4-не удается выполнить привязку среды выполнения для нулевой ссылки
Я пытаюсь вывести статистику игрока в таблице. Не все игроки будут иметь статистику в зависимости от дня. Я пробовал другие способы, и все до сих пор жалуются. Вот код, который у меня есть сейчас:
      <tbody>
            @foreach(var player in @ViewBag.Roster){
                int index = 0;
                <tr>
                    <td>@player.Name, @player.TeamName @player.Position</td>
                    if(@ViewBag.Stats[index] == null){
                        <td>--</td>
                        <td>--</td>
                        <td>--</td>
                        <td>--</td>
                    }
                    else{
                        <td>@ViewBag.Stats[index].Points</td>
                        <td>@ViewBag.Stats[index].Rebounds</td>
                        <td>@ViewBag.Stats[index].Assists</td>
                        <td>@ViewBag.Stats[index].Turnovers</td>                        
                    }
                </tr>
                index++;
            }
        </tbody>
Сведения Об Исключении: Microsoft.Используется CSharp.Рантимебиндер.RuntimeBinderException: не удается выполнить привязку среды выполнения для нулевой ссылки
Ошибка Источник:
строка 32: }
линия 33: else{
Строка 34: @ViewBag.Статистика[индекс].Очки
Строка 35: @ViewBag.Статистика[индекс].Подборы
Строка 36: @ViewBag.Статистика[индекс].Помогает
2 ответов
OK Я размещаю полный ответ здесь -
попробовать
@доif(@ViewBag.Stats[index] == null){и удалить@С@ViewBagвнутриifчтобы это выглядело так -@if(ViewBag.Stats[index] == null){- 
вы
index = 0внутриforeach, поэтому он инициализируется в каждом цикле. Инициализируйте его снаружиforeachтакойvar index = 0; foreach ... 
если вы столкнулись с проблемой для области, попробуйте это -
@{
    var index = 0;
    foreach (....) {
        .......
        index++
    }
}
Если вы хотите, чтобы отслеживать индекс, почему бы вам не переписать цикл так:
    var obj = new string[] { "", "", "" };
    for(var index = 0; index < obj.Length; index++)
    {
        var item = obj[index];
        /* DO STUFF WITH ITEM */
    }
    foreach(var item in obj.Select((value, index) => new { index, value }))
    {
        /* DO STUFF WITH item.Value */
    }