OrchardCore

四、Orchard Core入门:自定义模块在管理后台中增加菜单

2019-04-13  本文已影响2人  老哥深蓝

自定义模块已经建立好了,我们在Admin后台启用它,并没有什么效果。
如何为我们的自定义模块增加一个菜单项呢?


image.png
  1. 我们打开MyModule项目文件,使用NuGet管理器,为该工程增加两个依赖项
    OrchardCore.Navigation、OrchardCoreAdmin。
  2. 在Controllers文件夹增加个AdminTextNavController.cs文件
using Microsoft.AspNetCore.Mvc;
using OrchardCore.Admin;

namespace MyModule.Controllers
{
    [Admin]//使该类具有Admin权限和主题
    public class AdminTextNavController :Controller
    {
        public ActionResult SubMenu1()
        {
            return View();
        }
        public ActionResult SubMenu2()
        {
            return View();
        }
    }
}
  1. 为SubMenu1和SubMenu2创建两个视图


    image.png

    在两个视图输入一些内容以区分:

//SubMenu1.cshtml
<p>子菜单1</p>

//SubMenu2.cshtml
<p>子菜单2</p>
  1. 增加菜单项,需要实现INavigationProvider接口,在模块的根目录下创建AdminMenu.cs文件
using Microsoft.Extensions.Localization;
using OrchardCore.Navigation;
using System;
using System.Threading.Tasks;

namespace MyModule
{
    public class AdminMenu : INavigationProvider
    {
        public IStringLocalizer T { get; set; }
        public AdminMenu(IStringLocalizer<AdminMenu> localizer)
        {
            T = localizer;
        }
        public Task BuildNavigationAsync(string name, NavigationBuilder builder)
        {
            //该菜单只作用于Admin菜单中
            if (!String.Equals(name, "admin", StringComparison.OrdinalIgnoreCase))
            {
                return Task.CompletedTask;
            }
            builder.Add(T["MyModules"], "after", rootView => rootView
                  .Add(T["子菜单1"], "1", SubMenu1 => SubMenu1
                    .Action("SubMenu1", "AdminTextNav", new { area = "MyModule" }))
                  .Add(T["子菜单2"], "1", SubMenu2 => SubMenu2
                  .Action("SubMenu2", "AdminTextNav", new { area = "MyModule" })));
            return Task.CompletedTask;
        }
    }
}
  1. 在Startup.cs中使用域模式注册这个菜单
        public override void ConfigureServices(IServiceCollection services)
        {
            services.AddScoped<INavigationProvider, AdminMenu>();
        }

很简单,然后运行Web项目看看效果。


image.png
上一篇 下一篇

猜你喜欢

热点阅读