[英]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.