Foreach dans un Foreach dans MVC Vue

BIG EDIT : j'ai édité mon post avec la réponse que j'ai trouvé avec l'aide de Von V et Johannes, UN GRAND MERCI à VOUS les GARS !!!!

J'ai essayé de faire une boucle foreach, à l'intérieur d'une boucle foreach dans mon index pour afficher mes produits dans un accordéon. Permettez-moi de vous montrer comment je suis en train de le faire.

Voici mes modèles :

public class Product
{
[Key]
public int ID { get; set; }
public int CategoryID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Path { get; set; }
public virtual Category Category { get; set; }
}
public class Category
{
[Key]
public int CategoryID { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}

C'est un un seul une relation, Un produit a une seule catégorie, mais une catégorie a de nombreux produits.

Voici ce que j'essaie de faire de mon point de vue :

@model IEnumerable<MyPersonalProject.Models.Product>   
<div id="accordion1" style="text-align:justify">
@foreach (var category in ViewBag.Categories)
{
<h3><u>@category.Name</u></h3>
<div>
@foreach (var product in Model)
{
if (product.CategoryID == category.CategoryID)
{
<table cellpadding="5" cellspacing"5" style="border:1px solid black; width:100%;background-color:White;">
<thead>
<tr>
<th style="background-color:black; color:white;">
@product.Title  
@if (System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal("/admin", User, "GET"))
{
@Html.Raw(" - ")  
@Html.ActionLink("Edit", "Edit", new { id = product.ID }, new { style = "background-color:black; color:white !important;" })
}
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="background-color:White;">
@product.Description
</td>
</tr>
</tbody>      
</table>                       
}
}
</div>
}  
</div>

Je ne suis pas tout à fait sûr que ce est la bonne façon de le faire, mais c'est à peu près ce que je suis en train de faire. Foreach catégories, mettre tous les produits de cette catégories à l'intérieur d'un accordéon onglet.

  • catégorie 1
    • produit 1
    • produit 3
  • de catégorie 2
    • produit 2
    • produit 4
  • catégorie 3
    • produit 5

Ici, je vais ajouter ma cartographie de ma un grand nombre (Merci Brian P) la relation :

public class MyPersonalProjectContext : DbContext
{
public DbSet<Product> Product { get; set; }
public DbSet<Category> Category { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Product>();
modelBuilder.Entity<Category>();
}
}

Je vais aussi ajouter mon contrôleur de sorte que vous pouvez voir comment j'ai fait :

public ActionResult Index()
{
ViewBag.Categories = db.Category.OrderBy(c => c.Name).ToList();
return View(db.Product.Include(c => c.Category).ToList());
}

BIG EDIT : j'ai édité mon post avec la réponse que j'ai trouvé avec l'aide de Von V et Johannes, UN GRAND MERCI à VOUS les GARS !!!!

Si il y a une relation, pourquoi avez-vous une ICollection<Catégorie> dans la classe de Produit? Qu'est-ce que votre contrôleur de l'action? Qu'est-ce que le modèle adopté pour la vue?
La raison pour laquelle j'ai une ICollection<Catégorie> est parce que parfois, j'ai besoin d'obtenir le CatogoryID ou le Nom de ce Modèle. Comme ici, je veux afficher le nom de la catégorie sur mon accordéon <h3>. Ne suis-je pas en train de faire ?
Votre relation n'est PAS de 1-1, c'est plusieurs-1, vous avez juste à penser à l'envers. 1 catégorie a de nombreux produits.
Je pense que vous avez raison... je si à ce sujet à l'envers. Maintenant, il serait logique que la raison pour laquelle je ne suis pas capable de ça

OriginalL'auteur Guillaume Longtin | 2013-04-12