我想使用<ul> and <li>
标签创建菜单。我在MVC3 + Razor工作。我在这样的数据库中存储了菜单
MenuId名称ParentMenuId OrderBy
1 Item1 Null 1
2 Item2 Null 2
3 Item2.1 2 1
4 Item2.1.1 3 1
5 Item2.1.2 3 2
HTML输出应为
<ul>
<li><a href="#">Item1</a></li>`
<li><a href="#">Item2</a></li>`
<ul>
<li><a href="#">Item2.1</a></li>
<ul>
<li><a href="#">Item2.1.1</a></li>
<li><a href="#">Item2.1.2</a></li>
</ul>
</ul>
</ul>
任何人都可以帮助我如何从中生成菜单。我试着在网上搜索,但找不到我能用的东西。
我看到这篇文章(Recursion in an ASP.NET MVC view),其中一个回复是创建HTMLHelperExtension
。
但是在我的情况下无法找到如何使用。
答案 0 :(得分:2)
@helper CreateCategory(int? nid)
{
var childs = context.Categories.Where(c=>c.parentid == nid).OrderBy(C => C.order);
int childsCount = childs.Count();
if (childsCount == 0)
return;
<ul>
@foreach (Category child in childs)
{
<li>
<a href="@child.Url">@child.Title</a>
CreateCategory(child.Id);
</li>
}
</ul>
}
你最呼吁这个帮手:
CreateCategory(null);
希望这可以提供帮助。
答案 1 :(得分:0)
您应该使用DisplayTemplate 这是一个例子:
<!-- Your view -->
@if (Model.Items != null)
{
<ul>
foreach (var item in Model.Items)
{
@Html.DisplayFor(m => item)
}
</ul>
}
<!-- Your DisplayTemplate control -->
<li>
@Model.Name
</li>
@if (Model.Items != null) {
<ul>
foreach (var item in Model.Items)
{
@Html.DisplayFor(m => item)
}
</ul>
}
因此,您将从DisplayTemplate中重复调用DisplayTemplate以呈现嵌套的项