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 Я размещаю полный ответ здесь -

  1. попробовать @ до if(@ViewBag.Stats[index] == null){ и удалить @ С @ViewBag внутри if чтобы это выглядело так -@if(ViewBag.Stats[index] == null){

  2. вы 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 */
    }