我如何拥有一个控制器,它可以将一些模型传递(返回)到_Layout.cshtml.view



我有一个由EF自动生成的文件index.cshtml(代码优先)。以下代码在文件中运行良好

@model IEnumerable<dyescan.Models.MyMainMenuItem>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ItemText)
</td>
<td>
@Html.DisplayFor(modelItem => item.LinkAction)
</td>
<td>
@Html.DisplayFor(modelItem => item.LinkController)
</td>
</tr>
}

但是当我在_layout.cshtml中复制粘贴代码时,我无法在那里使用此模型。

Object reference not set to an instance of an object

我在这行@foreach(var item in Model)中得到了以上错误。以下是我在_Layout.cshtml 中的代码

@model IEnumerable<dyescan.Models.MyMainMenuItem>
@foreach(var item in Model)
{
<li>@Html.ActionLink(item.ItemText,item.LinkAction,item.LinkController)</li>
}

更新

所以我试着用这种方式来关注这些评论。我制作了一个控制器Shared(文件夹名),在该控制器中我制作了动作_Layout(视图的文件名)。现在它返回dbContex。我的主菜单项。。到视图

但仍然无法为_Layout制作控制器。。为我的菜单项传递一个模型

当您在cshtml视图中使用模型时,您的Action方法返回如下模型:-

public ActionResult Index()
{
var items = themes.Select(o => new SelectListItem {Text = o, Value = o, Selected = o == theme});
return View(items);
}

当Action方法返回模型时,它被绑定到视图。因此,在上面的代码中,项目将绑定到index.cshtml。如果您尝试在_Layout.cshtml中访问此模型,它将出错。

最新更新