表中具有可相关模型的MVC模型

时间:2013-10-27 20:11:48

标签: c# asp.net-mvc razor ienumerable

我有一个模型,在那个模型中我有另外两个模型的2个可枚项。像这样:

public class InvoiceModel
{
    public int? InvoiceId { get; set; }
    public IEnumerable<ItemModel> Items { get; set; }
    public IEnumerable<ItemModel> AvailableItems { get; set; )
    public decimal? SubTotal { get; set; }
    public decimal? Discounts { get; set; }
    public decimal? Taxes { get; set; }
    public decimal? Total { get; set; }
}

ItemModel看起来像这样:

public class ItemModel
{
    public int? Id { get; set; }
    public decimal? Amount { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal? UnitCost { get; set; }
    public int? Quantity { get; set; }
}

现在,在视图中,用户正在创建发票,根据看起来像表格的视图中的AvailableItems将项目模型(项目)添加到发票中。

所以我们有一张表,其中每一行代表添加到发票中的项目。最后一行有一个由AvailableItems填充的选择的下拉列表,用于将他们从下拉列表中选择的项目动态添加到表格底部,就在选择新项目的最后一行之前。它还将项添加到模型的Items属性中。除了我不知道如何实现这个或甚至开始询问。

我模拟了该表应该是什么样子: enter image description here

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

在模型方面,你在ItemModel上需要这样的东西:

 public int? InvoiceId { get; set; }
 public int? AvailableInvoiceId { get; set; }

或者您将遇到映射问题,因为IEnumerable将不知道如何链接到ItemModel。

但老实说,我认为一些设计气味已经悄悄进入:

1)AvailableItems列表是附加到发票上的好奇之处,您确定这不应该是一个单独的表/模型吗? InvoiceId / AvailableInvoiceId确实应该是必填字段,如果你试图把两件东西塞进同一个表中,这是不可能的。

2)主键不应该是可空的!

3)我一般看到导航属性实现为ICollection&lt;&gt;而不是IEnumerable&lt;&gt; - 你可能有这个问题。

如果这只是一个模型当然可以理解。