我有一个项目集合。这是我的视图模型:
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个不同的供应商名称。
在我传递视图模型的视图中,我希望显示每个供应商的名称,并且在每个供应商下,我希望显示该供应商名称的Amount和Tax网格。
我认为我需要在我的视图中这样做,但我不确定如何做到这一点。
我更喜欢让视图模型紧密地适应视图,并在视图中尽可能少地进行数据操作。毕竟,视图的责任不在于塑造数据,而在于将数据公开给用户。所以我用
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; }
}
您可以采用两步流程。在你的控制器中这样做:
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
}
}
请确保,当你抓住供应商列表在你的视图(无论是通过ViewBag或ViewData),以确保将其转换回IEnumerable<string>
(以及MyCollection到IEnumerable<MyClass>
),你应该很好去。