我有一个MVC项目,我想使用Model。
来渲染我的菜单我在Global.asax.cs中的Session_Start
事件中声明菜单内容,并使用断点我知道它正在填写正确。
我不能简单地在@Html.Partial("_Menu")
_Layout.cshtml
如果我@Html.Partial("_Menu", Model.Something)
,我会得到一个
对象引用未设置为对象的实例
模型上的错误。
答案 0 :(得分:2)
首先我建议不要使用会话对象,但是既然你正在使用它,那么在所有控制器继承你的公共控制器的Initialize方法(覆盖)中你将获取菜单来自会话的数据,并将其推入viewbag。然后在_Layout中,您可以从viewbag中检索对象(
var navigationItems = ViewBag.NavigationItems as NavigationViewModel;
)as field并在任何地方使用该对象,方法是将它或它的属性传递给部分渲染(
@Html.Partial("_Navigation", navigationItems)
)。
希望有所帮助。
答案 1 :(得分:1)
您可以使用Razor - 部分:
内部_Layout.cshtml:
<div id=”menu”>
@RenderSection("Menu", required:false)
</div>
&安培;在页面上(例如Index.cshtml)你想要菜单:
@section Menu
{
@Html.Partial("_Menu", Model.Something)
}
答案 2 :(得分:0)
提供更多详情:
Session_Start
?Model.Something
?创建动态菜单的最简单方法是@Html.RenderAction
。