强类型用户控件视图不允许asp.net mvc?

时间:2009-04-10 02:50:11

标签: asp.net-mvc

这是设置 - 我有一个列出产品的视图。在同一页面上,我有一个用户控件视图,列出了类别。

我将产品列表传递给视图,如下所示:

return View(myProducts);

用户控制视图通过ViewData [“Category”]

获取所需的数据

现在,如果我尝试使用类似这样的强类型用户控件视图:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<myData.Models.Category>>" %>

我收到此错误:

传递到字典中的模型项的类型为'System.Collections.Generic.List 1[myData.Models.Product]' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [myData.Models.Category]'。

由于我将“产品”列表传递给视图,因此用户控件视图似乎很混乱。所以如果我删除这样的强类型:

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

一切正常。

那么,强类型用户控件视图是不允许的?或者我只是做错了什么?

2 个答案:

答案 0 :(得分:0)

类型A的通用列表不能分配给类型B的通用列表(其中B是从A派生的)。这是.Net中所有通用集合的一般规则。

答案 1 :(得分:0)

渲染局部视图时,请使用ViewData [“Category”]作为传递给控件的模型。

<% Html.RenderPartial( "MyUserControl", ViewData["Category"], ViewData ); %>