2013-07-31 60 views
0

我試圖將我的主視圖中的Kids集合傳遞給partial。此主視圖爲強類型,Kids屬性爲MainModelhas_many關聯。ASP中的嵌套集合視圖部分MVC

我有我的默認詳細視圖,其中我的@model MyApp.Models.MainModel

裏面這個觀點,我想告訴其子,

@Html.Partial("_KidsView", Model.Kids)

其配置這樣在我MainModel.cs

public ICollection<Kid> Kids { get; set; }

,並在我的parital _KidsView被指定爲例如:

@model ICollection<MyApp.Models.Kid>

我得到了InvalidOperationException在那裏說

The model passed into this the dictionary if of type 
'System.Data.Entity.DyanmicProxies.MainModel_#WHOLE_BUNCH_OF_NUMBERS' 
but this dictionary requires a model item of type 
'System.Collections.Genereic.ICollection[MyApp.Models.Kid] 

我還沒有使用的部分,並要求直接在@foreach (var item in Model.Kids)foreach環路嘗試,但還沒有任何工作。

我該如何將此通過?

我覺得我可能會做某些明顯錯誤的事情,但我看不到它。

編輯:

好的,所以解決方案不工作。我認爲這是我的一個模型中的不正確之處。

這裏是Kid.cs:

[Column("main_model_id")] 
public int MainModelID { get; set; } 
public virtual MainModel MainModel {get; set; } 

和MainModel.cs

public ICollection<Kid> Kids { get; set; }

+0

你試過用列表代替ICollection嗎? – AntSpiteri

+0

更改模型ICollection 以模擬IEnumerable Fals

+0

您可以在_KidsView中顯示模型的使用情況嗎? –

回答

1

你得到的錯誤是明確的,實際上只能由兩個原因引起:

  1. 您的部分視圖中的模型說明不正確,您說它不是。

  2. 你傳錯了錯誤信息給PartialRenderPartial。具體來說,如果你沒有指定模型參數,默認情況下它會填充主視圖的模型(這似乎是基於錯誤發生的,但在你的問題中你所調用的是正確的)。

因爲它似乎既不是那些的話,我只能假設有某種緩存正在進行或其他一些「粘性」是造成當前的代碼,實際上不是是正在運行的代碼。停止並重新啓動調試,甚至可能關閉Visual Studio並在確認代碼確實正確後再試一次。

另一種解決方案是使用顯示模板來代替 - 它非常像局部視圖,但在這種情況下有點清潔。

  1. 在您的「視圖」文件夾中,創建一個名爲「DisplayTemplates」的新文件夾。在該文件夾中,創建一個名爲「Kid.cshtml」的部分視圖。對您的Kid模型非常重視(不是可枚舉的,只是Kid)。添加應爲Kid的一個實例呈現的HTML。

  2. 在您的主視圖中添加以下內容:

    @Html.DisplayFor(m => m.Kids) 
    
  3. 黨!

+0

我嘗試使用顯示模板。顯示的頁面沒有錯誤,但兒童不可見。我更新了我的文章,詳細介紹了實施情況,以防萬一您看到有關內容。我去了Kids索引,爲此,'MainModel'屬性是可見的(如@ Html.DisplayFor(model => model.MainModel.Name)'所以我有點困惑。 – ovatsug25

+0

你錯過了你的'ICollection '屬性上有'virtual',如果沒有'virtual',實體框架不能覆蓋它創建的代理後代的屬性,因此實際上不能用數據庫中的'Kid'填充集合 –

+0

:)...所以我錯過了一些非常明顯的東西。至少我學到了一個新的提示! – ovatsug25

0

這裏是你應該怎麼做;讓我們說這是你的主要型號:

public class MainModel 
{ 
    public IEnumerable<Kid> Kids { get; set; } 
    // Other properties 
} 

這樣做是你的主要觀點:

@model MyApp.Models.MainModel 

@Html.EditorFor(model => model.Kids) 

然後,創建類似下面的局部視圖,將其命名爲Kid.cshtml,並將其放置在瀏覽/共享/ EditorTemplates:

@model MyApps.Models.Kid 

@* Your html helpers (input fields) *@