【问题标题】:MVC Model with enumerable Model in table表中具有可枚举模型的 MVC 模型
【发布时间】:2013-10-27 20:11:48
【问题描述】:

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

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

我有一个表格应该是什么样子的模型:

任何帮助将不胜感激!

【问题讨论】:

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


    【解决方案1】:

    在模型方面,您将需要在 ItemModel 上使用类似的东西:

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

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

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

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

    2) 主键不能为空!

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 2016-06-27
      相关资源
      最近更新 更多