是否可以在_layout.cshtml上添加视图模型?

时间:2012-04-13 18:53:38

标签: asp.net-mvc-3 viewmodel

场景是我想用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.错误。

1 个答案:

答案 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()来填充它们。