【问题标题】:created nested list in MVC3在 MVC3 中创建嵌套列表
【发布时间】:2014-05-04 04:53:16
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    你可以试试这样的:

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

    希望这会有所帮助。

    【讨论】:

    • 这是一个很好的答案!谢谢。
    【解决方案2】:

    您应该使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      相关资源
      最近更新 更多