Foreach in null

时间:2013-10-11 21:02:37

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

我有这个模特课:

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }

    public DbSet<ForeignExpression> learnedexpressions { get; set; }
}

我在控制器中创建了dbset:

int userID = (int)Membership.GetUser().ProviderUserKey;
model.ForeignExpressions=db.UserProfiles.Find(userID).learnedexpressions;

然后在视图中,我尝试将它们写出来:

@foreach (var exp in Model.ForeignExpressions.OrderByDescending(m => m.dateAdded).Take(@numOfExpressions).ToList().OrderBy(m => m.dateAdded))
{
<tr>
<td> @exp.expression</td>
<td> @exp.meaning</td>
<td> "@exp.context"</td>
<td> @exp.dateAdded</td>
</tr>  
}

但是,Model.ForeignExpressions为null,因此我得到foreach的运行时错误(Value不能为null)。我怀疑这是因为我还没有为当前用户提供任何ForeignExpression,因此learnedexpressions的值为null。我是否正确,处理此问题的最佳方法是什么?我应该在视图,控制器还是模型中修复它?

2 个答案:

答案 0 :(得分:1)

learnedespressions属性设为虚拟,以便允许延迟加载集合,并将属性类型从DbSet<T>更改为ICollection<T>

答案 1 :(得分:1)

在尝试使用ForeignExpressions之前测试null是否为@if (Model.ForeignExpressions != null) { // foreach }

{{1}}