C# MVC 中的动态子菜单

dynamic sub menu in C# MVC

在我的应用程序中,我试图制作一个动态菜单。我正在做的是这样的。

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

有什么想法吗??

如果您有一个菜单对象列表作为子菜单怎么办?

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