1

我有一个项目集合。这是我的视图模型:

public class MyViewModel
{
    public IEnumerable<MyClass> MyCollection { get; set; }
}

public class MyClass
{        
    public string VendorName { get; set; }
    public decimal Amount { get; set; }
    public decimal Tax { get; set; }           
}

所以我的收藏有大约 200 行。多行可以具有相同的供应商名称,因此我的集合中有 5 个不同的供应商名称。

在我将视图模型传递到的视图中,我想显示每个供应商的名称,并且在每个供应商下,我想显示该供应商名称的金额和税金网格。

我认为我需要在我的观点范围内这样做,但我不确定如何去做。

4

2 回答 2

3

我宁愿让视图模型紧密地适应视图,并尽可能少地在视图中进行数据操作。毕竟,塑造数据不是视图的责任,只是将它们暴露给用户。所以我会用

public class Vendor
{
    public string VendorName { get; set; }
    public IEnumerable<VendorInfo> VendorData { get; set; }
}

public class VendorInfo
{
    public decimal Amount { get; set; }
    public decimal Tax { get; set; }
}

public class MyViewModel
{
    public IEnumerable<Vendor> Vendors { get; set; }
}

因此,您只需一次即可从供应商名称及其详细信息构建 UI 元素。

于 2013-01-07T10:32:31.743 回答
0

您可以采用两步过程。在您的控制器中执行以下操作:

var vendors = MyCollection.Select(myc => myc.VendorName).Distinct();

并确保将供应商(连同 MyCollection)传递给您的视图(或者您可以在您的视图中执行此操作——这取决于您自己的个人喜好)。然后在视图中执行以下操作:

foreach(var vendor in vendors)
{
  var currentCollection = MyCollection.Select(myc => myc.VendorName.Equals(vendor));
  foreach(MyClass something in currentCollection)
  {
     //Do what you want
  }
}

确保当您在 View 中获取供应商列表时(通过 ViewBag 或 ViewData)确保将其转换回IEnumerable<string>(以及 MyCollection 到IEnumerable<MyClass>),您应该一切顺利。

于 2013-01-06T05:05:46.267 回答