2013-01-15 132 views
5

我是一名mvc新手。ASP.net MVC 4從數據庫加載菜單到局部視圖

我想要做的是從數據庫中加載菜單,並在部分視圖中顯示它。這部分視圖將從_layout視圖中調用。

家庭控制器

在Home控制器

我添加一個名爲 「_MainMenu」

PartialView動作

這是我_MainMenu PartialView

@model IEnumerable<appMRP.Models.menu> 
<ul id="menu"> 
    @foreach (var item in Model) 
    { 
     <li>@item.menu1</li> 
    }            
</ul> 

佈局頁面

當我運行這個這個部分菜單顯示在我的_Layout.cshtml這樣

<nav>      
    @Html.Partial("_MainMenu") 
</nav> 

。我得到了錯誤 「的NullReferenceException是由用戶代碼未處理,未設置到對象的實例 對象引用」

似乎是「模式」在我_MainMenu是空

我做了什麼錯?

謝謝

回答

9

如果你的局部視圖使用了一個模型,你需要通過它在這樣的:

@Html.Partial("_MainMenu", Model.ListOfMenus) 

或類似的東西。目前,您未指定_MainMenu視圖的模型,因此使用null。當您嘗試@foreach時,它會拋出您看到的異常。

請注意,@Html.Partial("_MainMenu")未調用您的_MainMenu控制器操作,只是呈現該名稱的視圖。

如果你想打電話的動作,你可以使用一個子操作是這樣的:

@Html.Action("_MainMenu", "HomeController") 
+0

謝謝。我使用 @ Html.Action(「_ MainMenu」,「HomeController」) 它工作 –

4

你已經得到了答案。檢查_db.menu.ToList()是否不返回null。我建議你使用Model-View-ViewModel模式。創建視圖模型。並將其返回給View,以便您可以控制模型以及向視圖顯示的內容。

  1. 您沒有將模型信息傳遞給HTML Partial方法,因爲您試圖迭代集合。所以它會拋出一個空引用異常。

這樣

public class MenuViewModel 
{ 
     public int menuID { get; set; } 
     public string menuname { get; set; } 
     public string otherProperty { get; set; } 
     public string someotherProperty { get; set; } 
} 
在你看來

一些事情

@model IEnumerable<MenuViewModel> 

<nav>      
    @Html.Partial("_MainMenu",Model) 
</nav> 
+0

謝謝。這添加了我的知識庫爲mvc概念。 –