2014-02-21 20 views
0

我有一个由EF自动生成的文件index.cshtml(代码优先)。下面的代码工作正常,在该文件中我怎么可以有一个控制器,它可以传递(返回)一些模型到_Layout.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.MyMainMenuItems ..到视图

但仍无法作出_layout控制器..通过它的模型为我的菜单项

+2

你是否在显示布局时返回任何对象? – germi

+1

在你的控制器中,你是否返回'View(model)'? – Jonesopolis

+0

哦,我应该尽力做到这一点..感谢您的良好指导 – Sami

回答

0

当您使用CSHTML视图模型,你的动作方法的返回模型如: -

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中访问这个模型,它会给出错误。

+0

请参阅我的更新。我无法将模型从任何控制器传递给_Layout =>我如何拥有一个控制器,它可以将模型传递给_Layout.cshtml。我可以做任何其他正常观点。 – Sami

+0

您可以使用viewBag或viewData传递模型,但在这种情况下,您必须从每个操作方法传递它。 – Akhlesh

+0

你真的不希望你的_Layout采取模型 – Jonesopolis

相关问题