自定义模块已经建立好了,我们在Admin后台启用它,并没有什么效果。
如何为我们的自定义模块增加一个菜单项呢?
image.png
- 我们打开MyModule项目文件,使用NuGet管理器,为该工程增加两个依赖项
OrchardCore.Navigation、OrchardCoreAdmin。 - 在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();
}
}
}
-
为SubMenu1和SubMenu2创建两个视图
image.png
在两个视图输入一些内容以区分:
//SubMenu1.cshtml
<p>子菜单1</p>
//SubMenu2.cshtml
<p>子菜单2</p>
- 增加菜单项,需要实现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;
}
}
}
- 在Startup.cs中使用域模式注册这个菜单
public override void ConfigureServices(IServiceCollection services)
{
services.AddScoped<INavigationProvider, AdminMenu>();
}
很简单,然后运行Web项目看看效果。
image.png
网友评论