2014-05-04 4 views
5

Próbuję wypisać statystyki gracza w tabeli. Nie wszyscy gracze będą mieć statystyki w zależności od dnia. Próbowałem innych sposobów i wszyscy wciąż narzekają. Oto kod mam teraz:ASP.NET MVC 4 - Nie można wykonać wiązania wykonawczego na odwołaniu zerowym

 <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> 

wyjątków szczegóły: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: nie można wykonać wykonawczego wiążąca null odniesienia

Błąd Źródło:

Linia 32:}

Linia 33: inny {

Linia 34: @ ViewBag.Stats [indeks] .Points

Linia 35: @ ViewBag.Stats [indeks] .Rebounds

Linia 36: @ ViewBag.Stats [indeks] .Assists

+0

Nie rozumiesz, z czym masz do czynienia? –

+0

Próbuję sprawdzić, czy każdy gracz ma stat. Jeśli to zrobię, wypiszę to. Inaczej po prostu wypisz "-". Może istnieje inna składnia do sprawdzania, czy istnieje stat? – user3562751

+0

Tak! To działało, ale teraz mój indeks ++ nie działa. Wszelkie pomysły, w które powinienem je umieścić? Po prostu wyświetla te same statystyki dla wszystkich moich graczy. – user3562751

Odpowiedz

6

OK jestem delegowania pełną odpowiedź tutaj -

  1. Spróbuj @ przed if(@ViewBag.Stats[index] == null){@ i usunąć z @ViewBag wewnątrz if tak, że wygląda tak - @if(ViewBag.Stats[index] == null){

  2. Ustawiasz index = 0, wewnątrz foreach, więc jest inicjowany w każdej pętli. Zainicjalizować ją na zewnątrz foreach jak ten problem

    var index = 0; foreach ...

Jeśli stoją na zakres spróbować -

@{ 
    var index = 0; 
    foreach (....) { 
     ....... 
     index++ 
    } 
} 
+0

Świetne, że to było. Dziękuję Ci bardzo! – user3562751

+0

Serdecznie zapraszam –

+0

Świetnie, to sprawiło, że ponownie sprawdzam mój * .cshtml i znalazłem odniesienie do modelu, który nie istnieje po tym, jak zrobiłem kopiuj/wklej z innego kodu (używając składni Razor), coś w stylu "@Model. pozycja "na końcu mojego kodu. Po prostu komentuję, że linia kodu działa dla mnie. –

0

jeśli chcesz śledzić indeksu, dlaczego nie przepisać twoja pętla jako:

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 */ 
    } 
Powiązane problemy