传递到字典中的模型项是类型的

时间:2010-11-27 19:04:20

标签: asp.net-mvc

我有一个我理解的错误,但无法想出以正确的方式解决。

我有一个MasterPage,我在MasterPage上打电话:

<% 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]'。

所以设置如下:

MasterPage加载一个带有JegManglerEn.Item集合的View,并尝试加载一个带有JegManglerEn.Controllers.CategoryCount集合的PartialView ......但是没有这样做。

我知道它与RenderPartial方法有关,因为如果我将它改为RenderAction,它的效果很好。

如果你们有答案,我可以跳过查看MVC soruce或启动Reflector。

谢谢!

2 个答案:

答案 0 :(得分:5)

当您调用Html.RenderPartial的单参数重载时,您隐式将父视图的整个模型向下传递给partial。这不起作用,因为视图所期望的模型类型不匹配。

让RenderPartial在上下文中工作的最简单方法是创建一个包含Tags和页面模型数据的复合模型类型,然后调用将父模型的一部分传递给partial的重载:

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

话虽如此,我认为RenderAction很可能是这里的方式,因为它可以更容易地避免控制器中的重复代码(当然,假设您以相同的方式为所有页面继承加载标签数据来自相关的母版页。)

答案 1 :(得分:0)

更改

ViewUserControl<IEnumerable<JegManglerEn.Controllers.CategoryCount>>

ViewUserControl<List<JegManglerEn.Controllers.CategoryCount>>