2014-02-21 43 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

相關問題