繁体   English   中英

如何根据项目的属性组织视图中的项目列表?

[英]How to organize a list of items within a view based on an item's property?

我收集了一些物品。 这是我的视图模型:

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个不同的供应商名称。

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

我认为我需要在我看来这样做,但我不确定如何做到这一点。

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

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元素。

您可以采用两步流程。 在你的控制器中这样做:

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> )时,您应该很好走。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM