簡體   English   中英

在C#和MVC 3.0中將3個列表顯示為矩陣

[英]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
                            @:&nbsp;    
                        }
                    </td>
                }
            </tr>
        }
    </tbody>
</table>

您的prices表對SQL非常友好,但並不完全適合實際問題。 我認為您的價格應該存儲在Dictionary<Tuple<Product, Partner>, Price>而不是List<Price>

由於這是MVC,因此我將使用該詞典作為視圖模型的一部分(以及產品和合作伙伴)。 然后將其顯示為表格將非常簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM