ここで、これをあなたの見解に入れます:
<ul>
<li>Mobile
<ul>
<li>Cellphones</li>
<li>Mobile Accessories</li>
</ul>
</li>
<li>Camera
<ul>
<li>Camcorder</li>
<li>Camera Accessories</li>
<li>SLRs</li>
<li>Photo Printers</li>
</ul>
</li>
<li>Computers
<ul>
<li>Laptops</li>
<li>Memory Cards</li>
<li>Monitors</li>
<li>RAM</li>
<li>Computer Accessories</li>
</ul>
</li>
</ul>
それがあなたが求めていることですが、もう少し何かを望んでいると思います。
あなたの質問やあなたの試みには具体的なものがないため、次の解決策ではいくつかの仮定が行われています。
クラス:
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public List<Category> Subcateogries { get; set; }
public Category()
{
Subcateogries = new List<Category>();
}
}
コントローラ:
public ActionResult Index()
{
//The Data
var categories = new List<Category>
{
new Category { Id = 0, Name = "Mobile" },
new Category { Id = 21, Name = "Cellphones" },
new Category { Id = 22, Name = "Mobile Accessories" },
new Category { Id = 0, Name = "Camera" },
new Category { Id = 55, Name = "Camcorder" },
new Category { Id = 60, Name = "Camera Accessories" },
new Category { Id = 61, Name = "SLRs" },
new Category { Id = 63, Name = "Photo Printers" },
new Category { Id = 0, Name = "Computers" },
new Category { Id = 65, Name = "Laptops" },
new Category { Id = 67, Name = "Memory Cards" },
new Category { Id = 69, Name = "Monitors" },
new Category { Id = 70, Name = "RAM" },
new Category { Id = 71, Name = "Computer Accessories" }
};
var GroupedData = new List<Category>();
foreach(var category in categories)
{
if(category.Id == 0)
{
GroupedData.Add(category);
}
else
{
GroupedData.Last().Subcateogries.Add(category);
}
}
return View(GroupedData);
}
意見:
@model List<Category>
<h2>Categories</h2>
<ul>
@foreach (var topCategory in Model)
{
<li>@topCategory.Name
<ul>
@foreach (var subCategory in topCategory.Subcateogries)
{
<li>@subCategory.Name</li>
}
</ul>
</li>
}
</ul>
これは、開始リスト (この場合はカテゴリ) が希望する順序になっているという前提で作成されます。また、 GroupedDataを作成したときに、元のリスト項目を再利用するだけで近道をしました。また、2 つのレベルしか存在しないことも想定されています。
部分ビューを利用して複数のレベルを処理するようにビューをリファクタリングできますが、それは問題の一部ではありませんでした。