场景是我想用Mvc.Sitemap填充导航栏,菜单。
我应该如何实现这一点?
在布局页面上添加视图模型感觉很奇怪。这可能会导致视图具有多个视图模型。
有人可以帮忙吗?谢谢。
更新:----------我将主页/_Menu作为使用菜单视图模型的部分视图。但是,如何在_layout中包含该视图?
我不能简单地在_Layout.cshtml
中使用@Html.Partial("_Menu")
,因为我需要指定构建视图模型的控制器和操作。正确的方法是什么?
如果我这样做@Html.RenderAction("_Menu", "Home")
,我会在模型上得到一个Object reference not set to an instance of an object.
错误。
布局中不应有模型,因为默认情况下从那里调用的每个视图都将具有此模型。相反,您应该使用该模型创建一个菜单视图,并在调用它时将新的 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() 在每个级别的菜单上填充它们。