2012-04-19 14 views
1

私は別のエンティティからデータを取得するビューで問題に遭遇しています。基本的に私はカテゴリーと商品のデータをまとめてまとめたブリッジングエンティティCategoryProductを持っています。私が最終的に表示したいのは、製品のリストとその製品のそれぞれのカテゴリです。しかし、私は完全にその最後の部分 - 表示カテゴリ - を実現させる方法に固執しています。ASP.NET MVC3 Razorモデル内でのクエリ(foreach内foreach)

は、ここに私のモデルのコードです -

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()); 
} 

は最後に私の見解では、製品やカテゴリが表示されますが、右別のカテゴリを持つ場合は、同じ製品の余分な行を作成するだけです。製品1:カテゴリ1、製品1:カテゴリ2など。 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> 

エラー出カテゴリー1、カテゴリー:コンパイラエラーメッセージ:CS1579:foreach文はタイプ「ProductsCode.Models.CategoryProduct」の変数を操作することはできませんので、私が取得したい場所や製品の1であります'ProductsCode.Models.CategoryProduct'に 'GetEnumerator'のパブリック定義が含まれていません

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

+1

のようなのviewmodel何かを変更することはできません。 –

+0

@KirkWollは、foreach内でforeachを実行している問題です。IEnumerableではないというエラーが表示されます。 – firedrawndagger

+0

「IEnumerable」ではないと不平を言っていますか? * 'IEnumerable'は何ですか? –

答えて

3

なぜあなたはちょうど私が `foreach`内部に含まれる` foreach`が表示されていないこの

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>