ASP.NET MVC 4 - 无法对空引用执行运行时绑定

use*_*751 6 c# asp.net asp.net-mvc

我想在表格中输出玩家的统计数据.根据当天的情况,并非所有玩家都有统计数据.我尝试过其他方式,所有人都在抱怨.这是我现在的代码:

      <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>
Run Code Online (Sandbox Code Playgroud)

异常详细信息:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法对空引用执行运行时绑定

来源错误:

第32行:}

第33行:else {

第34行:@ ViewBag.Stats [index] .Points

第35行:@ ViewBag.Stats [index] .Rebounds

第36行:@ ViewBag.Stats [index] .Assists

bra*_*der 9

好的,我在这里发布完整的答案 -

  1. 尝试@之前从内部if(@ViewBag.Stats[index] == null){删除,使它看起来像这样 -@@ViewBagif@if(ViewBag.Stats[index] == null){

  2. 你在index = 0里面设置,foreach所以它在每个循环中初始化.foreach像这样在外面初始化它

    var index = 0; foreach ...

如果您遇到范围问题,试试这个 -

@{
    var index = 0;
    foreach (....) {
        .......
        index++
    }
}
Run Code Online (Sandbox Code Playgroud)