2012-08-03 95 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渲染嵌套項目