2013-01-06 78 views
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個不同的供應商名稱。

在我將視圖模型傳遞給我的視圖中,我想顯示每個供應商的名稱,並且在每個供應商下我想要顯示該供應商名稱的金額和稅金網格。

我認爲我需要在我的視野內做到這一點,但我不確定如何去做。

回答

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元素在短短的一個通行證。

+0

這就是我將如何處理它。不要重複你的數據,把它分解出來。 +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 
    } 
} 

確保當您在瀏覽搶供應商列表(或者是ViewBag或ViewData的),以確保投回IEnumerable<string>(以及MyCollection的到IEnumerable<MyClass> ),你應該很好走。