0

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

谁能帮助我如何从中生成菜单。我尝试在互联网上搜索,但找不到可以使用的东西。

我看到这篇文章(ASP.NET MVC 视图中的递归),其中一个答复是创建HTMLHelperExtension

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

4

2 回答 2

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

希望这会有所帮助。

于 2012-08-03T06:38:37.607 回答
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 来渲染嵌套的 Items

于 2012-08-03T09:31:33.313 回答