Foreach in einer Foreach-in MVC-Ansicht

BIG EDIT : ich habe bearbeitet meine gesamte post mit der Antwort, dass ich kam mit der Hilfe Von V und Johannes, EIN GROßES DANKE JUNGS !!!!

Ich versucht habe zu tun, eine foreach-Schleifen innerhalb einer foreach-Schleife in meine index-Ansicht, um die Anzeige meiner Produkte in einem accordion. Lassen Sie mich Ihnen zeigen, wie ich versuche, dies zu tun.

Hier sind meine Modelle :

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

Es ist ein eine eines-viele-Beziehung, Ein Produkt hat nur eine Kategorie, sondern eine Kategorie viele Produkte.

Hier ist, was ich versuche zu tun, aus meiner Sicht :

@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>

Ich bin mir nicht ganz sicher, ob dies der richtige Weg, es zu tun, aber das ist ziemlich viel, was ich versuche zu tun. Foreach Kategorien, alle Produkte von Kategorien, die innerhalb eines Akkordeon-tab.

  • Kategorie 1
    • Produkt 1
    • Produkt 3
  • Kategorie 2
    • Produkt 2
    • Produkt 4
  • Kategorie 3
    • Produkt 5

Hier will ich hinzufügen, mein mapping für meine one-man ein-vielen (Dank Brian P) Beziehung :

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

Ich auch meine controller so dass Sie sehen können, wie ich es gemacht habe :

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

BIG EDIT : ich habe bearbeitet meine gesamte post mit der Antwort, dass ich kam mit der Hilfe Von V und Johannes, EIN GROßES DANKE JUNGS !!!!

  • Wenn es ein eins-zu-eins-Beziehung, warum haben Sie eine ICollection<Kategorie> in der Product-Klasse? Was macht der controller-Aktion Aussehen? Was ist das Modell an die view?
  • Der Grund, ich habe eine ICollection<Kategorie> weil manchmal ich brauche, um die CatogoryID oder den Namen dieses Modells. Wie hier, möchte ich die Anzeige der Kategorie, name auf meinem Akkordeon <h3>. Bin ich nicht richtig ?
  • Ihre Beziehung ist NICHT 1-1 ist es viele-1, Sie sind einfach nur zu denken über Sie nach hinten. 1 Kategorie viele Produkte hat.
  • Ich glaube, Sie haben Recht... ich dachte über ihn nach hinten. Jetzt würde es Sinn machen, warum bin ich nicht in der Lage, es
Schreibe einen Kommentar