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 */
}