在MVC3中创建了嵌套列表

时间:2012-08-03 05:45:58

标签: asp.net-mvc-3 asp.net-mvc-2

我想使用<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

但是在我的情况下无法找到如何使用。

2 个答案:

答案 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以呈现嵌套的项