Razor在尝试显示Item时获取null引用

时间:2015-11-07 19:52:57

标签: c# asp.net-mvc entity-framework razor

我在MVC中有一个基本视图,它将列出我的所有属性。属性模型以这种方式编码:

public class Property
{

    public int Id { get; set; }

    [Display(Name = "Type")]
    public PropertyType Type { get; set; }

    [Display(Name = "Address")]
    public Address Address { get; set; }

    [Display(Name = "Area")]
    [Required(ErrorMessage = "A property area is required.")]
    public double Area { get; set; }

}

基本上我有两个外键:类型和地址。我已经能够将一些信息插入数据库,如下所示:

enter image description here

所以数据库包含了这些信息,但每当我调用Index视图列出所有属性时,我都会得到一个NullReferenceException。

@foreach (var item in Model) {
<tr>
    <td>
        @Html.Display(item.Type.Id.ToString())
    </td>
    <td>
        @Html.Display(item.Address.Id.ToString())
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Area)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
        @Html.ActionLink("Details", "Details", new { id=item.Id }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.Id })
    </td>
</tr>

编辑:空值来自Controller类,就像这样:

    public ActionResult Index()
    {
        return View(db.Properties.ToList());
    }

enter image description here

我该怎么办?

2 个答案:

答案 0 :(得分:4)

如果您使用EF,则需要使用以下内容包含导航属性:

db.Properties.Include(i => i.Address).Include(i => i.Type).ToList()

这将使内部联接和您的属性填充。

有关详细信息,请参阅docs

答案 1 :(得分:1)

@Html.DisplayFor(modelItem => item.Area)

我想这是抛出错误的那一行。

拿出来看看是否仍然出现错误。