[英]Display 3 lists as a matrix in C# and MVC 3.0
我有以下3個課程:
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視圖的表格單元格中的頂部行顯示合作伙伴,在左列顯示產品,並在每個單元格和價格中顯示價格(如果適用於每個合作伙伴和產品)?
與往常一樣,我將從設計一個將反映視圖需求的視圖模型開始:
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
@:
}
</td>
}
</tr>
}
</tbody>
</table>
您的prices
表對SQL非常友好,但並不完全適合實際問題。 我認為您的價格應該存儲在Dictionary<Tuple<Product, Partner>, Price>
而不是List<Price>
。
由於這是MVC,因此我將使用該詞典作為視圖模型的一部分(以及產品和合作伙伴)。 然后將其顯示為表格將非常簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.