ASP.NET MVC来自数据库的多级菜单

时间:2012-10-04 19:11:08

标签: asp.net-mvc linq razor

我有一个名为Categories的表,它包含以下字段: Id |名称| ParentId //父ID实际上是一个自引用

所以从_Layout.cshtml调用名为MainMenu.cshtml的局部视图

_Layout.cshtml

    @Html.Partial("MainMenu")

我怎样才能将模型发送到主菜单,我知道有一个部分过载,我也可以发送模型。我试图以优雅的方式解决问题,而不会破坏MVC架构。

1 个答案:

答案 0 :(得分:0)

我猜每个页面的菜单没有区别,为什么在每个视图中调用partial并将MenuModel传递给每个视图?

相反,请使用@Html.Action("Menu")

执行从数据库中检索菜单项的操作。 使用实体框架,您可以在数据库中拥有以下类:

public class MenuModel{
public List<MenuItemModel> Items{get;set;}
}

public class MenuItemModel{
public int Id {get;set;}
public string Name {get;set;}
// If there are no childs the object will be null.
public List<MenuItemModel> Childs {get;set;}
}

您检索该类,然后将其传递给HtmlHelper扩展方法或简单地将其传递给cshtml文件中的辅助函数,该函数将检索MenuModel对象并显示它。

使用递归函数,逻辑很简单: 打印当前项目。如果有孩子 - &gt;为内部项创建一个表/容器,并在容器内调用每个子函数的相同函数。