我有一个我理解的错误,但无法想出以正确的方式解决.
我有一个MasterPage,从那个MasterPage我打电话:
<% Html.RenderPartial("Tags"); %>
Run Code Online (Sandbox Code Playgroud)
Tags是一个强类型视图,如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<JegManglerEn.Controllers.CategoryCount>>" %>
Run Code Online (Sandbox Code Playgroud)
我像这样返回PartialView:
return View("Tags", result);
Run Code Online (Sandbox Code Playgroud)
结果是正确的和类型:
List<CategoryCount>
Run Code Online (Sandbox Code Playgroud)
错误是这样的:
传递到字典中的模型项的类型为'System.Collections.Generic.List 1[JegManglerEn.Item]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1 [JegManglerEn.Controllers.CategoryCount]'.
所以设置如下:
MasterPage加载一个带有JegManglerEn.Item集合的View,并尝试加载一个带有JegManglerEn.Controllers.CategoryCount集合的PartialView ......但是没有这样做.
我知道它与RenderPartial方法有关,因为如果我将它改为RenderAction,它的效果很好.
如果你们有答案,我可以跳过查看MVC soruce或启动Reflector.
谢谢!
当您调用Html.RenderPartial的单参数重载时,您隐式将父视图的整个模型向下传递给partial.这不起作用,因为视图所期望的模型类型不匹配.
让RenderPartial在上下文中工作的最简单方法是创建一个包含Tags和页面模型数据的复合模型类型,然后调用将父模型的一部分传递给partial的重载:
Html.RenderPartial("Tags", Model.Tags);
Run Code Online (Sandbox Code Playgroud)
话虽这么说,我认为RenderAction很可能是这里的方式,因为它可以更容易地避免控制器中的重复代码(当然,假设您以相同的方式为从主页继承的所有页面加载标签数据问题).
| 归档时间: |
|
| 查看次数: |
6927 次 |
| 最近记录: |