2012-09-19 71 views
0

我對這裏給出的答案接受一個跟進的問題:Two models in one view in ASP MVC 3結合使用多種模型在一個視圖中

我有三個型號,種類,原因,地點,我想列出的內容在一個視圖中。基於鏈接的答案上面我做了相結合的新模式,看起來像這樣:

public class Combined 
    { 
     public IEnumerable<Place> Place { get; set; } 
     public IEnumerable<Type> Type { get; set; } 
     public IEnumerable<Cause> Cause { get; set; } 
    } 

我把它的IEnumerable <>,因爲按照我的理解,這就是我想要的東西時,我只是想列出這些模型的內容在foreach循環中。然後我做了這個控制器的觀點:

[ChildActionOnly] 
    public ActionResult overSightHeadings() 
    { 
     Combined Combined = new Combined(); 
     return View(Combined); 
    } 

最後的觀點(我只是想從一個表的第一列):

@model mvcAvvikelser.Models.Combined 
@{ 
    Layout = null; 
} 
<tr> 
@foreach (var Type in Model.Type) 
{ 
    <th> @Html.DisplayTextFor(ModelItem => Type.Name)</th> 
} 
</tr> 

這段代碼的問題是,它當foreach代碼開始時拋出一個空異常。

System.NullReferenceException: Object reference not set to an instance of an object. 

所以我不完全知道我在做什麼錯在這裏,豈不是一個IEnumerable,我已初始化控制器不正確的模型?

+0

你做錯了什麼是你沒有初始化你的'Combined'屬性。列表是空的 – codingbiz

回答

1

應該是這個

[ChildActionOnly] 
public ActionResult overSightHeadings() 
{ 
    Combined combined = new Combined(); 
    combined.Types = new List<Type>(); 
    combined.Causes = new List<Cause>(); 
    combined.Places = new List<Place>(); 

    return View(Combined); 
} 

請注意,我已將屬性名稱更改爲複數。這將您的財產定義爲集合。

+0

感謝這似乎工作,至少不會拋出一個錯誤。該視圖似乎沒有返回任何結果。 – Dennis

+0

您需要爲它們分配值。現在他們是空的。你從哪裏得到這些價值?獲取這些值並將它們賦值而不是'新列表()' – codingbiz

+0

啊是的。現在你解釋它是有道理的。我從數據庫中檢索值,然後用適當的「連接」替換新的列表(),現在它可以正常工作:) – Dennis

0

看起來像

public IEnumerable<Type> Type { get; set; } 

未設置

嘗試初始化這個列表模型構造 蒙山沒有IEnumerable的 像

List<Type> Type = new List<Type>(); 
相關問題