场景是我想用Mvc.Sitemap填充导航栏,菜单。
我该如何实现这个目标?
在布局页面上添加视图模型会感觉很奇怪。这可能会导致视图中有多个View Models。
任何人都可以帮忙吗?谢谢。
更新:---------- 我有Home / _Menu作为使用MenuViewModel的局部视图。但是如何在_layout中包含该视图?
我不能简单地在@Html.Partial("_Menu")
中使用_Layout.cshtml
,因为我需要指定构建视图模型的控制器和操作。这样做的正确方法是什么?
如果我执行@Html.RenderAction("_Menu", "Home")
,我会在模型上遇到Object reference not set to an instance of an object.
错误。
答案 0 :(得分:1)
您的布局中不应该有模型,因为默认情况下您从那里调用的每个视图都将具有此模型。相反,您应该使用模型创建一个Menu视图,当您调用它时,将一个新的MenuModel作为模型传递给它。
编辑: 您可以使用一个类,将数据从存储菜单值的位置中提取出来。然后你这样称呼你的部分:
@Html.Partial("_Menu_", menuobject.Root)
上课:
partial class menuobject
{
public static menuobject Root
{
// MenuRoots are all roots that have ID -1 - which will be the root
return MenuRoots.Single(x => x.Something == "Topnavi"); // this will return the root above all your menus
}
}
在您的视图中,您可以在每个级别的菜单上使用foreach()来填充它们。