2013-01-08 17 views
0

我有這3類:顯示3列出了在C#中的矩陣和MVC 3.0

public class Product 
    { 
      public int ProductId { get; set; } 
      public int ClassId { get; set; } 
      public string Name { get; set; } 
      public virtual Class Class { get; set; } 
     } 



public class Partner 
    { 
     public int PartnerId { get; set; } 
     public int ClassId { get; set; }  
     public string Name { get; set; } 
     public virtual Class Class { get; set; } 
    } 



public class Price 
    { 
     public int PriceId { get; set; } 
     public int ClassId { get; set; } 
     public int ProductId { get; set; } 
     public int PartnerId { get; set; } 
     public float Cost { get; set; } 
    } 

,我有3個數據表:

List<Product> products; List<Partner> partners; List<Price> prices; 

我怎麼能顯示最上面一行的合作伙伴,左欄中的產品和價格(如果它適用於每個合作伙伴和產品)在MVC視圖中的表單元格中?

回答

4

一如往常我會通過設計將反映觀的要求視圖模型開始:

public class MyViewModel 
{ 
    public IEnumerable<Product> Products { get; set; } 
    public IEnumerable<PartnerPricesViewModel> PartnerProductPrices { get; set; } 
} 

public class PartnerPricesViewModel 
{ 
    public string PartnerName { get; set; } 
    public IEnumerable<Price> Prices { get; set; } 
} 

,然後我將填充在從我們的域模型控制器動作這個視圖模型,並把它傳遞給觀點:

public ActionResult Index() 
{ 
    List<Product> products = ... 
    List<Partner> partners = ... 
    List<Price> prices = ... 

    var model = new MyViewModel 
    { 
     Products = products, 
     PartnerProductPrices = 
      from partner in partners 
      select new PartnerPricesViewModel 
      { 
       PartnerName = partner.Name, 
       Prices = 
        from product in products 
        select prices.FirstOrDefault(price => 
         price.PartnerId == partner.PartnerId && 
         price.ProductId == product.ProductId 
        ) 
      } 
    }; 

    return View(model); 
} 

最後我也會有相應的強類型視圖視圖模型:

@model MyViewModel 

<table> 
    <thead> 
     <tr> 
      <th></th> 
      @foreach (var product in Model.Products) 
      { 
       <th>@product.Name</th> 
      } 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (var partner in Model.PartnerProductPrices) 
     { 
      <tr> 
       <td>@partner.PartnerName</td> 
       @foreach (var price in partner.Prices) 
       { 
        <td> 
         @if (price != null) 
         { 
          @price.Cost.ToString("c") 
         } 
         else 
         { 
          // There was no price found matching this 
          // product and partner => we display an empty cell 
          @:&nbsp;  
         } 
        </td> 
       } 
      </tr> 
     } 
    </tbody> 
</table> 
0

您的prices列表非常適合SQL,但並不真正適合實際問題。我認爲您的價格應存儲在Dictionary<Tuple<Product, Partner>, Price>而不是List<Price>

既然這是MVC,我會使用該字典作爲視圖模型(以及產品和合作夥伴)的一部分。然後將其顯示爲表格將非常簡單。