#Render部分使用布局视图中的模型

时间:2012-10-04 07:32:56

标签: asp.net-mvc layout model partial-views

我有一个MVC项目,我想使用Model。

来渲染我的菜单

我在Global.asax.cs中的Session_Start事件中声明菜单内容,并使用断点我知道它正在填写正确。

我不能简单地在@Html.Partial("_Menu")

中使用_Layout.cshtml

如果我@Html.Partial("_Menu", Model.Something),我会得到一个

  

对象引用未设置为对象的实例

模型上的错误。

3 个答案:

答案 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