ASP.NET剃刀实体框架空引用异常

问题描述:

这是导致该问题的代码,它是在视图中:ASP.NET剃刀实体框架空引用异常

@{ 
    if(item.Contract_Type != null) 
    { 
     dangerhtml = (item.Contract_Type == "Premium") ? "class=\"warning\"" : ""; 
    } 
} 
<td @dangerhtml> 
    @Html.DisplayFor(modelItem => item.Contract_Type) 
</td> 

此代码是坐在里面的foreach:

@foreach (var item in Model) { 
..etc 
} 

它在if行上抛出一个NullReferenceException。代码工作正常,如果我删除所有上面的,只是做的事:

<td> 
     @Html.DisplayFor(modelItem => item.Contract_Type) 
</td> 

但我期待以设置基于任何帮助赞赏的item.Contract_Type

内容单元格的类!

+0

它看起来像对象“item”为null。你能告诉我们你初始化那个对象的位置吗? – Luke 2014-10-12 12:41:33

+0

我已添加到原始帖子 – Trinitrotoluene 2014-10-12 12:46:16

+0

您在视图中添加了“@model IList ”吗? (如此处所述:http://weblogs.asp.net/scottgu/asp-net-mvc-3-new-model-directive-support-in-razor) – Luke 2014-10-12 12:58:06

我很确定这个项目是空的,正如Luke已经提到的那样,@ Html.DisplayFor只会吞下这个。

你为什么不只是添加以下WHERE子句,以防止空项被处理:

@foreach (var item in Model.Where(i => i != null)) 
{ 
    ..etc 
} 

或检查Contract_Type防止NullReferenceException异常发生前,你可以空,检查项目:

if(item != null && item.Contract_Type != null) 
{ 
    dangerhtml = (item.Contract_Type == "Premium") ? "class=\"warning\"" : ""; 
} 

但也许是最好的办法是,以确保没有空的对象是它传递给视图之前被写入型号收集..