C#MVC中的动态子菜单

时间:2015-02-13 09:59:40

标签: c# asp.net-mvc razor

在我的应用中,我正在尝试制作动态菜单。我在做什么就是这样。

1 - 我有一个模特

public class Menu
{
    public String LinkText;
    public String ActionName;
    public String ControllerName;
    public String OrganizationId;
    public String SubMenuLabel;
}

2 - 我有一个控制器,它将菜单项添加到与上述模型相对应的列表中。

List<Menu> menu = new List<Menu>();
menu.Add(new Menu { LinkText = org.Name, ActionName = "Index", ControllerName = "Organization", OrganizationId = org.Id, SubMenuLabel = "Go To" });
ViewBag.menu = menu;

在视图一侧,我循环浏览菜单并显示菜单。我遇到的问题是子菜单。我正在努力将子菜单的逻辑放在一起。现在我有一个子菜单标签,如果存在我在下拉菜单中显示它,但如果我在子菜单中有多个条目,它就不起作用。

视图的代码是这个

@foreach (var item in ViewBag.menu)
       {
          <li class="divider"></li>
            if (!String.IsNullOrEmpty(@item.SubMenuLabel))
                {
                <li class="has-dropdown not-click">
                    <a href="#">@item.SubMenuLabel</a>
                    <ul class="dropdown">
                        <li><a href="/@item.ControllerName/@item.ActionName/@item.OrganizationId" class="">@item.LinkText</a></li>
                    </ul>
                </li>
                }
                else
                {
                <li>
                    <a href="/@item.ControllerName/@item.ActionName/@item.OrganizationId" class="">@item.LinkText</a>
            </li>
        }
      }

任何想法?

1 个答案:

答案 0 :(得分:1)

如果您将Menu对象列表作为subMenu,该怎么办?

public class Menu
{
    public String LinkText;
    public String ActionName;
    public String ControllerName;
    public String OrganizationId;
    public List<Menu> SubMenus;
}

然后在视图中嵌套foreach:

@foreach (var item in ViewBag.menu)
   {
      <li class="divider"></li>
        if (item.SubMenu != null){
             @foreach (var subMenu in item)
             {
               ...
             }
        }
        else
        {
            <li>
                <a href="/@item.ControllerName/@item.ActionName/@item.OrganizationId" class="">@item.LinkText</a>
        </li>
        }
  }