2012-08-03 89 views
0

我想使用<ul> and <li>标签创建菜单。我在MVC3 + Razor工作。我存储的菜单在数据库这样在MVC3中创建嵌套列表

菜单ID名称ParentMenuId排序依据

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

你可以尝试这样的事:

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

希望这将有助于。

+0

这是伟大的答案!谢谢。 – 2013-09-18 13:58:30

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> 
} 

所以,你会recurcively调用DisplayTemplate从DisplayTemplate渲染嵌套项目