簡體   English   中英

ASP.NET MVC 4 - 無法對空引用執行運行時綁定

[英]ASP.NET MVC 4 - Cannot perform runtime binding on a null reference

我試圖在表格中輸出玩家的統計數據。 並非所有玩家都會根據日期獲得統計數據。 我嘗試了其他方法,但所有人仍在抱怨。 這是我現在擁有的代碼:

      <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.RuntimeBinder.RuntimeBinderException:無法對空引用執行運行時綁定

源錯誤:

第 32 行:}

第 33 行:其他{

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

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

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

好的,我在這里發布完整的答案 -

  1. 嘗試@之前if(@ViewBag.Stats[index] == null){並刪除@@ViewBagif這樣它看起來就像這樣- @if(ViewBag.Stats[index] == null){

  2. 您在foreach內部設置index = 0 ,因此它在每個循環中初始化。 像這樣在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 */
    }

我嘗試了上面建議的兩種情況,但沒有運氣。 最后,我不得不在控制器的 Index 方法本身中初始化我的 ViewBag 集合。 所以當我做這樣的事情時,

var stringArray = new string[10] { "", "", "", "", "", "", "", "", "", "" };
ViewBag.doc = stringArray;

有效。 (我有 10 個元素。如果它們更多,則必須為初始化做一些其他事情。)我在視圖部分的代碼現在如下:

  @for (var itm =0; itm< 10; itm++)
                        {
                    <div class="form-group">
                        <label asp-for="Documents[itm].doc"></label>
                        <input type="file" asp-for="Documents[itm].doc" />
                        @if (ViewBag.doc[itm] != "")
                        {<a asp-area="" asp-page="/wwwroot/CaseDocuments/@ViewBag.doc[itm]">@ViewBag.doc[itm]</a>
                            <label asp-for="Documents[itm].remove"></label>
                            @Html.CheckBoxFor(a => a.Documents[itm].remove)
                        }
                    </div>
                            <div class="form-group">
                                <label asp-for="Documents[itm].desc"></label>
                                <textarea asp-for="Documents[itm].desc" class="form-control" rows="3"></textarea>
                            </div>
                        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM