如何在基于aspnetboilerplate的项目中添加新菜单?

时间:2017-10-11 07:01:22

标签: asp.net-mvc solid-principles aspnetboilerplate

以前曾经问过这个问题,但我会更准确地回答我的问题,希望能得到更好的答案:

我已经想出了如何向PageNames类添加视图:

public const string WorkOrders = "WorkOrders";

然后到projectNavigationProvider类将它们导入导航栏:

         .AddItem(
            new MenuItemDefinition(
                    PageNames.WorkOrders,
                    L("WorkOrders"),
                    url: "WorkOrders",
                    icon: "business",
                    requiredPermissionName: PermissionNames.Pages_WorkOrders
                )

将主视图添加到主导航栏并正常工作。

但是,我还没想出如何创建一个全新的菜单以便在别处使用。在我正在开发的应用程序中,我们有几个页面显示特定表格中的所有记录,例如工作订单。但是每个表中的每个记录都应该有几个指向其他页面的链接,用于创建,编辑,详细信息和删除。

我的一个合作伙伴似乎通过使用对控制器端点的模态和ajax调用来解决其他页面上的这个问题。它适用于客户,只需要姓名和联系信息。但我不认为模式可用于创建,查看或编辑工作订单,因为它需要为每个工作订单添加订单项和相关数据他们等......这里有很多东西。最后,看起来似乎没有设置模板,因为他写了很多自己的j来让它工作。

目前,存在创建,编辑和详细信息视图,并且我在每条记录旁边都有链接,但是当我尝试使用该链接时出现错误。也许我不明白路由是如何工作的?在VS的普通mvc模板中,链接具有用于指定控制器和方法的属性,mvc处理其余部分。

<a asp-action="Edit" asp-route-id="@item.WorkOrderID">Edit</a> |
<a asp-action="Details" asp-route-id="@item.WorkOrderID">Details</a> |
<a asp-action="Delete" asp-route-id="@item.WorkOrderID">Delete</a>

我在尝试加载工作订单页面时遇到了同样的错误,但是没有将其添加到页面名称或navigationprovider,这使得我只需要添加指向navigationprovider类的链接但是我不想在主菜单上创建WordOrders创建页面的链接,我希望它在相应记录旁边的迷你菜单上。我已将页面添加到页面名称类,但我不确定如何为主页面创建单独的菜单。

public const string CreateWorkOrders = "CreateWorkOrders";

在查看navigationprovider类时,我看到:

 context.Manager.MainMenu

我想我必须能够创建另一个菜单,并像这样添加项目:

 context.Manager.NewMenu.AddItem(....

但看起来MainMenu在我无法找到或编辑的类中被引用。我应该创建另一个定义NewMenu的类,以便我能够在现有的navigationprovider类中配置它,还是应该为它创建一个单独的navigationprovider类?

希望我相信每个看过这个的人都会在寻求帮助之前做了大量的研究。即使链接到一些更详细的文档也会有所帮助。

1 个答案:

答案 0 :(得分:0)

您可以添加如下新菜单:

context.Manager.Menus.Add(WorkOrders, new MenuDefinition(WorkOrders, L(WorkOrders)));

用法:

context.Manager.Menus[WorkOrders].AddItem(...)