0

我有一个模型,在那个模型中我有另一个模型的 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 将 Item 模型(Items)添加到发票中。

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

我有一个表格应该是什么样子的模型: 在此处输入图像描述

任何帮助将不胜感激!

4

1 回答 1

1

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

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

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

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

1) 附在发票上的 AvailableItems 列表是一件很奇怪的事情,你确定这不应该是一个单独的表格/模型吗?InvoiceId/AvailableInvoiceId 确实应该是必填字段,如果您尝试将两个东西填充到同一张表中,这是不可能的。

2)主键不应该为空!

3) 我通常看到导航属性实现为 ICollection<> 而不是 IEnumerable<> - 你可能对此有疑问。

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

于 2013-10-27T21:31:30.527 回答