【问题标题】:Is it possible to give an ASP.NET MVC User Control a different Model than the Page是否可以为 ASP.NET MVC 用户控件提供与页面不同的模型
【发布时间】:2010-09-29 02:19:01
【问题描述】:

我有一个订单页面,它是从具有一些属性的模型对象(订单)呈现的。 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。

【问题讨论】:

  • 我上次尝试时没有遇到任何问题;听起来您没有将正确的对象传递给用户控件。
  • 给定一个 OrderItem,你如何获得相关的 OrderComment?

标签: asp.net-mvc user-controls


【解决方案1】:

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

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

您可以在http://www.codeplex.com/aspnet 处查看实际源代码。单击“源”选项卡并向下导航到 MVC 源树。

【讨论】:

  • 您不需要指定用户控件的路径,除非它们位于非标准位置。
  • @Todd Smith -- 我不确定,我面前没有样品。谢谢。现在,修复了。
【解决方案2】:

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

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

this old post from Rob Conery

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 2011-08-20
    • 2012-01-02
    • 2011-02-24
    • 2010-10-12
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多