Menu from database =>的正确解决方案是什么? httpcontext()中布局与模型的基本视图模型

时间:2018-02-06 13:29:55

标签: asp.net-mvc

我试图找出在ASP.NET中创建菜单的正确解决方案。菜单包含项目和子项目,并受用户权限的约束。所以我有一个MenuService,它返回当前用户的菜单。但是我不知道如何实现菜单。

到目前为止,我找到了3种可能的解决方案:

  1. 定义要在Layout上添加的基本视图模型,并且每个页面视图模型都应该从此派生(这意味着IMenuService需要在每个控制器上)
  2. 使用我附加IMenuService的基本控制器,并在每次操作之前将其附加到HttpContext.Items(基于此https://dtoncode.wordpress.com/2012/07/30/strongly-typed-models-on-your-layout/
  3. 为菜单定义控制器,在布局中调用局部视图以将菜单放在其上。
  4. 这些解决方案中哪一项适合这项工作?还有其他人吗?

1 个答案:

答案 0 :(得分:0)

您可以使用MvcSiteMapProvider - 它与Web Forms SiteMap provider model非常相似,但是为MVC制作。

基本上,整个SiteMap层次结构被加载到缓存中并在用户之间共享。您可以通过多种方式配置节点 - 从数据库加载它们,您可以使用一个或多个dynamic node providers。它具有security trimming功能,可自动读取每个请求的[Authorize]属性,并相应地更改各个项目的可见性。

它使用的菜单和面包屑HTML帮助程序是模板化的,因此您可以更改它们以输出您需要的任何HTML。

完全披露:我为这个项目做出了重大贡献。