是否可以为ASP.NET MVC用户控件提供与页面不同的模型

时间:2009-01-01 01:14:53

标签: asp.net-mvc user-controls

我有一个订单页面,它是从具有一些属性的Model对象(Order)呈现的。 Order对象的一个​​属性是

public List<OrderItem> Items { get; set; };

,另一个是

public List<OrderComment> Comments { get; set; };

我的主页面声明如下:

public class OrderView : ViewPage<Order>

我想为每个OrderItem(名为OrderItemControl)和每个OrderComment的另一个用户控件(名为OrderCommentControl)设置用户控件。如果我可以为每个集合使用转发器那么这将是很好的,但我遇到了一个问题。我希望我的用户控件声明如下所示:

public class OrderItemControl : ViewUserControl<OrderItem>
public class OrderCommentControl : ViewUserControl<OrderComment>

当我尝试这样说时,我收到错误:

{“传入字典的模型项的类型为'Order',但此字典需要'OrderItem'类型的模型项。”}

我猜测转发器可能不是正确的方法,但我真的希望每个用户控件都有一个OrderItem或OrderComment类型的模型,而不仅仅是Order。

2 个答案:

答案 0 :(得分:3)

是。使用RenderPartial,您可以使用提供模型的签名,只需使用当前视图中可用的任何模型对象。

<% foreach (OrderItem orderItem in ViewData.Model.OrderItems)
   {
 %>
       <%= Html.RenderPartial( "OrderItem", orderItem, ViewData ) %>
<% } %>

你可以在http://www.codeplex.com/aspnet的实际来源中找到答案。单击Source选项卡,然后向下导航到MVC源代码树。

答案 1 :(得分:0)

确保您渲染用户控件的调用将正确的数据传递给渲染函数。

(我对ViewData当前对象模型的记忆是模糊的,但应该很接近)。

请参阅 this old post from Rob Conery