在Model中使用foreach循环时出现NullReferenceException

时间:2017-01-05 17:41:38

标签: c# html asp.net-mvc

我一直在尝试使用foreach显示数据库表中的数据,但是我收到此错误:

  

类型' System.NullReferenceException'的例外情况发生在App_Web_tncl0rkz.dll中,但未在用户代码中处理。

     

错误:@foreach(模型中的var img)

当我尝试访问View时,应用程序崩溃导致提到的错误。

这是我的View HTML代码 C#,因为我正在使用visual studio进行编程

@model IEnumerable<Common.Image>
....
<table class="table">
    <tr>
        <th>@Html.DisplayNameFor(model => model.imagePath)</th>
        ....
    </tr>
    @foreach (var img in Model)
    { 
        <tr>
            <td>@Html.DisplayFor(imgItem => img.imagePath)</td>
            ....
        </tr>
    }
</table>

这是我的Controller's C#代码。

[Authorize(Roles="Admin")]
public ActionResult UsersGallery(string username)
{
    ImagesBL imgBl = new ImagesBL();
    Image img = imgBl.GetImage(username);
    return View(img);
}

3 个答案:

答案 0 :(得分:0)

您似乎正在尝试迭代不是集合的对象。在你的控制器中,你传递的是一个&#34; Image&#34;而不是一个集合。但是,您的特定错误是一个空引用异常,因此它看起来像&#34; Model&#34;当它到达视图时可能为null。在某些时候(在控制器中或在视图中),您将需要在尝试访问对象的任何属性之前检查对象是否为null,否则您将获得空引用异常。

答案 1 :(得分:0)

从控制器操作发送单个图像(return View(img);),而View绑定到图像对象集合(@model IEnumerable<Common.Image>)。即使图像包含单个图像,也需要发送图像集。在操作方法

中更改以下语句
return View(img);

return View(new List<Image>(){img});

答案 2 :(得分:0)

您只返回了对象(图像的img类型)而不是集合列表。

Use Foreach for the collection only.如果您没有传递集合进行查看,那么您可以直接在模型中访问它。

您的代码:如果img不是集合,请删除foreach。

<tr>
                <td>
                    @Html.DisplayFor(model => model.imagePath)
                </td>
                <td>
                    @Html.DisplayFor(model => model.Signature)
                </td>
                <td>
                    @Html.DisplayFor(model => model.Username)
                </td>

                <td>
                    @Html.ActionLink("Download", "Download", new { username = Model.Username }) 
                </td>
            </tr>