自定義模塊已經(jīng)建立好了,我們?cè)贏dmin后臺(tái)啟用它测僵,并沒(méi)有什么效果街佑。
如何為我們的自定義模塊增加一個(gè)菜單項(xiàng)呢谢翎?
image.png
- 我們打開(kāi)MyModule項(xiàng)目文件,使用NuGet管理器沐旨,為該工程增加兩個(gè)依賴項(xiàng)
OrchardCore.Navigation森逮、OrchardCoreAdmin。 - 在Controllers文件夾增加個(gè)AdminTextNavController.cs文件
using Microsoft.AspNetCore.Mvc;
using OrchardCore.Admin;
namespace MyModule.Controllers
{
[Admin]//使該類具有Admin權(quán)限和主題
public class AdminTextNavController :Controller
{
public ActionResult SubMenu1()
{
return View();
}
public ActionResult SubMenu2()
{
return View();
}
}
}
-
為SubMenu1和SubMenu2創(chuàng)建兩個(gè)視圖
image.png
在兩個(gè)視圖輸入一些內(nèi)容以區(qū)分:
//SubMenu1.cshtml
<p>子菜單1</p>
//SubMenu2.cshtml
<p>子菜單2</p>
- 增加菜單項(xiàng)磁携,需要實(shí)現(xiàn)INavigationProvider接口褒侧,在模塊的根目錄下創(chuàng)建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中使用域模式注冊(cè)這個(gè)菜單
public override void ConfigureServices(IServiceCollection services)
{
services.AddScoped<INavigationProvider, AdminMenu>();
}
很簡(jiǎn)單,然后運(yùn)行Web項(xiàng)目看看效果谊迄。
image.png