Asp.net mvc #在布局视图中使用模型渲染局部

Asp.net mvc #在布局视图中使用模型渲染局部,asp.net-mvc,layout,model,partial-views,Asp.net Mvc,Layout,Model,Partial Views,我有一个MVC项目,我想在其中使用模型呈现菜单 我在Global.asax.cs中的Session\u Start事件中声明了菜单内容,使用断点我知道它填写正确 我不能简单地在我的\u Layout.cshtml中使用@Html.Partial(“\u菜单”) 如果我做了@Html.Partial(“\u Menu”,Model.Something),我会得到一个 对象引用未设置为对象的实例 模型错误。提供更多详细信息: 为什么要使用会话\u Start 你是如何填充模型的 创建动态菜单的最

我有一个MVC项目,我想在其中使用模型呈现菜单

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

我不能简单地在我的
\u Layout.cshtml中使用
@Html.Partial(“\u菜单”)

如果我做了
@Html.Partial(“\u Menu”,Model.Something)
,我会得到一个

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

模型错误。

提供更多详细信息:

  • 为什么要使用
    会话\u Start
  • 你是如何填充模型的
创建动态菜单的最简单方法是
@Html。RenderAction

提供了更多详细信息:

  • 为什么要使用
    会话\u Start
  • 你是如何填充模型的

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

您可以使用Razor-部分来实现以下目的:

Inside\u Layout.cshtml:

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

您可以使用Razor-部分来执行此操作:

Inside\u Layout.cshtml:

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

首先,我建议不要使用session对象,但由于您使用它,因此在所有控制器继承的公共控制器的初始化方法(覆盖)中,您将从session中获取菜单数据,并将其推送到viewbag中。然后在_布局中,您可以从viewbag中检索对象(

)作为字段,并通过将该对象或其属性传递给partial进行渲染,在任何位置使用该对象(

)


希望能有所帮助。

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

)作为字段,并通过将该对象或其属性传递给partial进行渲染,在任何位置使用该对象(

)


希望对您有所帮助。

会话开始时从数据库获取菜单值。在这一点上,我正在填充模型。然后在_layout.cshtml视图中呈现局部视图。如何在当前场景中使用@Html.RenderAction?@Abhishek您可以对所有逻辑使用
RenderAction
,这就像
Partial
,但您可以从操作中获取任何数据:使用缓存、访问数据库等。但我如何将我的模型传递给它。这也会产生空引用异常。@Abhishek您可以设置
routeValues
,然后从操作返回部分结果。会话开始,在开始时从数据库获取菜单的值。在这一点上,我正在填充模型。然后在_layout.cshtml视图中呈现局部视图。如何在当前场景中使用@Html.RenderAction?@Abhishek您可以对所有逻辑使用
RenderAction
,这就像
Partial
,但您可以从操作中获取任何数据:使用缓存、访问数据库等。但我如何将我的模型传递给它。这也会产生空引用异常。@Abhishek您可以设置
routeValues
,然后从操作返回部分结果。正在获取此ALSOGET中的null引用异常在此ALSOGET中设置null引用异常
var navigationItems = ViewBag.NavigationItems as NavigationViewModel;
@Html.Partial("_Navigation", navigationItems)