我有一个名为 Categories 的表,它包含以下字段: Id | 姓名 | ParentId //父id实际上是一个自引用
所以从 _Layout.cshtml 调用名为 MainMenu.cshtml 的局部视图
_Layout.cshtml
@Html.Partial("MainMenu")
我怎样才能将模型发送到主菜单,我知道部分过载,我也可以发送模型。我试图以一种不破坏 MVC 架构的优雅方式解决问题。
我有一个名为 Categories 的表,它包含以下字段: Id | 姓名 | ParentId //父id实际上是一个自引用
所以从 _Layout.cshtml 调用名为 MainMenu.cshtml 的局部视图
_Layout.cshtml
@Html.Partial("MainMenu")
我怎样才能将模型发送到主菜单,我知道部分过载,我也可以发送模型。我试图以一种不破坏 MVC 架构的优雅方式解决问题。
我猜每个页面的菜单没有什么不同,那么为什么在每个视图中调用 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 对象并显示它的辅助函数。
使用递归函数的逻辑很简单:打印当前项目。如果有孩子 -> 为内部项目创建一个表/容器,并在容器内部为每个子函数调用相同的函数。