1

ビューで、さまざまなエンティティからデータを取得する際に問題が発生しています。基本的に、Category と Product のデータをまとめるブリッジ エンティティ CategoryProduct があります。最終的に表示したいのは、製品のリストと、それらの各製品のカテゴリです。しかし、私はその最後の部分 - 表示カテゴリ - を実現する方法に完全に行き詰まっています。

ここに私のモデルのコードがあります -

public class Product
    {   
        public int ProductId { get; set; }
        public string Title { get; set; }
        public virtual ICollection<CategoryProduct> CategoryProducts { get; set; }
    }

    public class CategoryProduct
    {
        public int CategoryProductID { get; set; }
        public int CategoryId { get; set; }
        public int ProductId { get; set; }
        public virtual Product Product { get; set; }
        public virtual Category Category { get; set; }
    }

    public class Category
    {
        public int CategoryId { get; set; }
        public string Title { get; set; }
        public virtual ICollection<CategoryProduct> CategoryProducts { get; set; }
    }

私のコントローラーは非常に単純で、そのブリッジングエンティティをビューにプッシュするだけです:

public ActionResult Index()
{
    return View(db.CategoryProducts.ToList());
}

最後に、私のビューには Products と Categories が表示されますが、現在、別のカテゴリ (たとえば、Product 1: Category 1、Product 1: Category 2 など) がある場合、同じ製品に対して余分な行が作成されています。そして、私が到達したいのは、製品 1: カテゴリー 1、カテゴリー 2 です。

@model IEnumerable<ProductsCode.Models.CategoryProduct>
<h2>Index</h2>
<table>
    <tr>
        <th>Title</th>
        <th>Category</th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Product.Title)
        </td>
        <td>
           @foreach (var categories in item)
           {
             @Html.DisplayFor(modelItem => item.Why.Title)            
           }   
        </td>
    </tr>
}
</table>

エラー出力: コンパイラ エラー メッセージ: CS1579: 'ProductsCode.Models.CategoryProduct' に 'GetEnumerator' のパブリック定義が含まれていないため、foreach ステートメントは 'ProductsCode.Models.CategoryProduct' 型の変数を操作できません

編集: 他の foreach ループとエラーを追加しました。

4

1 に答える 1

3

ビューモデルをこのように変更できないのはなぜですか

 public class MyProduct
    {   
        public int ProductId { get; set; }
        public string Title { get; set; }
        public virtual ICollection<Category> CategoryList { get; set; }
    }

と表示

@model IEnumerable<ProductsCode.Models.MyProduct>
<h2>Index</h2>
<table>
    <tr>
        <th>Product</th>
        @Html.DisplayFor(modelItem => item.ProductId) 
        <th>Categories for Product</th>
    </tr>

@foreach (var item in Model.CategoryList) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryId)
        </td>
    </tr>
}
</table>
于 2012-04-19T14:26:31.633 に答える