码迷,mamicode.com
首页 > 其他好文 > 详细

abp添加动态菜单

时间:2016-04-14 22:06:11      阅读:873      评论:0      收藏:0      [点我收藏+]

标签:

abp中MenuDefinition封装了导航栏上的主菜单的属性,MenuItemDefinition则封装了子菜单的属性,子菜单可以引用其他子菜单构成一个菜单树。

MenuDefinitio成员如下:

    public object CustomData { get; set; }//自定义数据
       
    public ILocalizableString DisplayName { get; set; }//表示本地化字符串
       
    public IList<MenuItemDefinition> Items { get; set; }//子级菜单集合
       
    public string Name { get; }//菜单名称

    public MenuDefinition AddItem(MenuItemDefinition menuItem);//子菜单添加方法

 

 MenuItemDefinition成员如下:

    public object CustomData { get; set; }//自定义数据
        
       public ILocalizableString DisplayName { get; set; }//表示本地化字符串
       
       public IFeatureDependency FeatureDependency { get; set; }//功能特性
        
       public string Icon { get; set; }//菜单图标
        
       public bool IsLeaf { get; }//是否有子菜单
        
       public virtual IList<MenuItemDefinition> Items { get; }//子菜单
       
       public string Name { get; }//菜单名称
        
       public int Order { get; set; }//排序
        
       public string RequiredPermissionName { get; set; }//权限名称
        
       public bool RequiresAuthentication { get; set; }//权限验证如果通过验证显示此菜单否则不可见
        
       public string Url { get; set; }//URL

       public MenuItemDefinition AddItem(MenuItemDefinition menuItem);//添加子菜单

有了以属性并了解其作用我们可以方便自定任何菜单,在常规开发中我们可能需要从数据库,xml等数据源中加载一些动态菜单来满足我们的系统要求,有了以上对象我们可以方便的添加菜单!

设置菜单代码如下:

 public class AppNavigationProvider : NavigationProvider
    {
        public override void SetNavigation(INavigationProviderContext context)
        {
            #region 静态菜单

            context.Manager.MainMenu
                .AddItem(new MenuItemDefinition(
                    AppPageNames.Host.Tenants,
                    L("HostDashboardMenu"),
                    url: "host_dashboard",
                    icon: "menu-icon fa fa-home",
                    requiredPermissionName: PermissionNames.Pages_Host_Dashboard,
                    order: 1
                    )
                );

            #endregion

            #region 动态菜单
            
            var project=new MenuItemDefinition(
                    AppPageNames.Common.Project,
                    L("ProjectMenu"),
                    url: "roles",
                    icon: "menu-icon fa fa-briefcase",
                    requiredPermissionName: PermissionNames.Pages_Administration_Projects,
                    order: 5
                    );
              
            //这里模拟从数据库加载数据
            for (int i = 1; i <= 10; i++)
            {
                project.AddItem(new MenuItemDefinition(
                       "p1",
                       L("项目" + i),
                       url: "project",
                       icon: "menu-icon fa fa-tasks",
                       requiredPermissionName: PermissionNames.Pages_Administration_Projects,
                       customData: i
                   ));
            }
            context.Manager.MainMenu.AddItem(project);
            #endregion
           
        }

        private static ILocalizableString L(string name)
        {
            return new LocalizableString(name, DataCenterConsts.LocalizationSourceName);
        }
    }

效果如下

技术分享

abp添加动态菜单

标签:

原文地址:http://www.cnblogs.com/wangleicode/p/5392838.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!