ASP.NET MVC3 Razor在模型中查询(foreach中的foreach)

时间:2012-04-19 14:06:59

标签: c# asp.net-mvc razor foreach

我在View中遇到了一个问题,从不同的实体中提取数据。基本上我有一个桥接实体CategoryProduct,它将Category和Product数据汇集在一起​​。我想最终展示的是产品清单以及每种产品 - 它们的类别。然而,我完全坚持如何制作最后一部分 - 显示类别 - 发生。

这是我模型的代码 -

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等。我想去的地方是产品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:foreach语句无法对“ProductsCode.Models.CategoryProduct”类型的变量进行操作,因为“ProductsCode.Models.CategoryProduct”不包含“GetEnumerator”的公共定义

编辑:添加了另一个foreach循环和错误。

1 个答案:

答案 0 :(得分: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>