2010-11-27 59 views
3

我有一個錯誤,我有點理解,但無法弄清楚以正確的方式解決。傳入詞典的模型項目類型爲

我有一個母版,從母版我打電話:

<% Html.RenderPartial("Tags"); %> 

電子標籤是一種強類型的觀點是這樣的:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<JegManglerEn.Controllers.CategoryCount>>" %> 

我回到這樣的PartialView:

return View("Tags", result); 

其中結果是正確的和類型:

List<CategoryCount> 

該錯誤是這樣的:

傳遞到詞典中的模型項的類型爲 'System.Collections.Generic.List 1[JegManglerEn.Item]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [JegManglerEn.Controllers.CategoryCount]'。

所以設置是這樣的:

母版加載一個觀點,即需要JegManglerEn.Item的集合,也嘗試加載PartialView,需要一個JegManglerEn.Controllers.CategoryCount的集合......但未能這樣做。

我知道它與RenderPartial方法有關,因爲如果將其更改爲RenderAction,它的效果很好。

如果你們有答案,我可以跳過看MVC soruce或啓動Reflector。

謝謝!

回答

5

當你調用Html.RenderPartial的單參數超載,你含蓄地傳遞父視圖的整個模型下到部分。這不起作用,因爲視圖預期的模型類型不匹配。

在您的上下文中獲取RenderPartial的最簡單方法是創建一個包含標籤和頁面模型數據的組合模型類型,然後在將部分父模型傳遞給部分時調用重載:

Html.RenderPartial("Tags", Model.Tags); 

話雖這麼說,我想是的RenderAction最有可能的方式去這裏,因爲它可以更容易地避免在控制器重複的代碼(當然,假設你加載標籤數據以同樣的方式進行從有問題的主頁面繼承的所有頁面)。

0

更改

ViewUserControl<IEnumerable<JegManglerEn.Controllers.CategoryCount>> 

ViewUserControl<List<JegManglerEn.Controllers.CategoryCount>> 
相關問題