我有一个 MVC 项目,我想在其中使用 Model 呈现我的菜单。
我在 Global.asax.cs 中的事件中声明了菜单内容,Session_Start
并使用断点我知道它正在正确填写。
我不能简单地@Html.Partial("_Menu")
在我的内部使用_Layout.cshtml
如果我这样做@Html.Partial("_Menu", Model.Something)
了,我会得到一个
你调用的对象是空的
模型上的错误。
我有一个 MVC 项目,我想在其中使用 Model 呈现我的菜单。
我在 Global.asax.cs 中的事件中声明了菜单内容,Session_Start
并使用断点我知道它正在正确填写。
我不能简单地@Html.Partial("_Menu")
在我的内部使用_Layout.cshtml
如果我这样做@Html.Partial("_Menu", Model.Something)
了,我会得到一个
你调用的对象是空的
模型上的错误。
首先,我建议不要使用会话对象,但是由于您正在使用它,因此在所有控制器都从您继承的通用控制器的 Initialize 方法(覆盖)中,您将从会话中获取菜单数据,并将其推送到视野袋。然后在 _Layout 中,您可以从 viewbag 中检索对象(
var navigationItems = ViewBag.NavigationItems as NavigationViewModel;
) 作为字段并在任何地方使用该对象,方法是将其或其属性传递给部分进行渲染 (
@Html.Partial("_Navigation", navigationItems)
)。
希望有帮助。
您可以为此使用 Razor -部分:
在 _Layout.cshtml 内部:
<div id=”menu”>
@RenderSection("Menu", required:false)
</div>
& 在您想要的页面(例如 Index.cshtml)上菜单:
@section Menu
{
@Html.Partial("_Menu", Model.Something)
}
提供更多详细信息:
Session_Start
?Model.Something
?创建动态菜单的最简单方法是@Html.RenderAction
.