2013-10-11 38 views
0

我有這個模型類:的foreach在空

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爲空,所以我得到一個foreach的運行時錯誤(值不能爲空)。我懷疑這是因爲我目前還沒有任何ForeignExpression,所以learnedexpressions的值爲null。我是否正確,處理這個問題的最好方法是什麼?我應該在視圖,控制器還是模型中修復它?

+0

在試圖使用它之前如何檢查'Model.ForeignExpressions'是否爲空? –

回答

1

充分利用learnedespressions財產虛擬以便允許集合的延遲加載,改變從DbSet<T>屬性的類型ICollection<T>

+0

將learnedexpressions虛擬化後,問題仍然存在。 –

+0

是否爲您的'DbContext'實例啓用了延遲加載? – Moho

+0

我確定它現在已啓用,但仍然不好。 –

1

測試ForeignExpressions是否試圖使用它null之前:

@if (Model.ForeignExpressions != null) 
{ 
// foreach 
}