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を再帰的に呼び出して、ネストされたアイテムをレンダリングします

于 2012-08-03T09:31:33.313 に答える