大きな編集:フォンVとヨハネスの助けを借りて思いついたという答えで、投稿全体を編集しました。みんなに感謝します!!!!
製品をアコーディオンで表示するために、インデックス ビューの foreach ループ内で foreach ループを実行しようとしています。私がこれをやろうとしている方法をお見せしましょう。
ここに私のモデルがあります:
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; }
}
1 対 1多の関係です。1 つの製品には 1 つのカテゴリしかありませんが、1 つのカテゴリには多くの製品がありました。
これが私の見解でやろうとしていることです:
@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>
これが正しい方法かどうかはよくわかりませんが、これは私がやろうとしていることのほとんどです。カテゴリごとに、そのカテゴリのすべての製品をアコーディオン タブ内に配置します。
- カテゴリー1
- 製品 1
- 製品 3
- カテゴリー2
- 製品 2
- 製品 4
- カテゴリー3
- 製品 5
ここで、1 対 1多 (Brian P に感謝) 関係のマッピングを追加します。
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>();
}
}
また、コントローラーを追加して、私がどのように行ったかを確認できるようにします。
public ActionResult Index()
{
ViewBag.Categories = db.Category.OrderBy(c => c.Name).ToList();
return View(db.Product.Include(c => c.Category).ToList());
}
大きな編集:フォンVとヨハネスの助けを借りて思いついたという答えで、投稿全体を編集しました。みんなに感謝します!!!!