我有一系列物品。这是我的观点模型:
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个不同的供应商名称。
在我将视图模型传递给的视图中,我想显示每个供应商的名称,并且在每个供应商下面我想显示该供应商名称的金额和税金网格。
我认为我需要在我看来这样做,但我不确定该怎么做。
答案 0 :(得分: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元素。
答案 1 :(得分: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>
),以及你应该好好去。