我怎么能有一个控制器,它可以将一些模型传递给(返回)_Layout.cshtml。视图

时间:2014-02-21 13:55:18

标签: c# asp.net-mvc-4 ef-code-first

我有一个文件index.cshtml,由EF自动生成(代码优先)。以下代码在该文件中正常工作

@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>
}

更新

所以我试着按照这种方式发表评论。我创建了一个Controller Shared(文件夹名称),在那个控制器中我做了一个动作_Layout(视图的文件名)。现在它将dbContex.MyMainMenuItems ..返回给视图

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

1 个答案:

答案 0 :(得分:0)

在cshtml视图中使用model时,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中访问此模型,则会出错。