我有一个由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中访问此模型,它将出错。