0

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

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

_Layout.cshtml

    @Html.Partial("MainMenu")

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

4

1 回答 1

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 对象并显示它的辅助函数。

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

于 2012-10-04T19:53:22.613 回答