0

我有一个 MVC 项目,我想在其中使用 Model 呈现我的菜单。

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

我不能简单地@Html.Partial("_Menu")在我的内部使用_Layout.cshtml

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

你调用的对象是空的

模型上的错误。

4

3 回答 3

2

首先,我建议不要使用会话对象,但是由于您正在使用它,因此在所有控制器都从您继承的通用控制器的 Initialize 方法(覆盖)中,您将从会话中获取菜单数据,并将其推送到视野袋。然后在 _Layout 中,您可以从 viewbag 中检索对象(

var navigationItems = ViewBag.NavigationItems as NavigationViewModel;

) 作为字段并在任何地方使用该对象,方法是将其或其属性传递给部分进行渲染 (

@Html.Partial("_Navigation", navigationItems) 

)。

希望有帮助。

于 2012-10-12T21:21:36.417 回答
1

您可以为此使用 Razor -部分

在 _Layout.cshtml 内部:

<div id=”menu”&gt; 
@RenderSection("Menu", required:false)
</div>

& 在您想要的页面(例如 Index.cshtml)上菜单:

@section Menu 
{
 @Html.Partial("_Menu", Model.Something)
}
于 2012-10-04T07:44:51.350 回答
0

提供更多详细信息:

  • 你为什么使用Session_Start
  • 你怎么填模型Model.Something

创建动态菜单的最简单方法是@Html.RenderAction.

于 2012-10-04T07:41:08.433 回答