2013-01-15 6 views
5

Jestem nowicjuszem mvc.ASP.net MVC 4 ładowanie menu z bazy danych do częściowego widoku

Co próbuję zrobić, to załadować menu z bazy danych i wyświetlić go w widoku częściowym. Ten widok częściowy zostanie wywołany z widoku _layout.

Home Controller

w kontrolerze Home I dodać akcję "_MainMenu"

PartialView

to moja _MainMenu PartialView

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

Układ strony

to częściowe menu jest wyświetlane w moim _Layout.cshtml jak ten

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

gdy uruchamiam to. mam błąd „NullReferenceException był nieobsługiwany przez kod użytkownika. Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu

wydaje się, że „model” w moim _MainMenu jest null

co zrobiłem źle?

dziękuję

Odpowiedz

9

Jeśli częściowy widok wykorzystuje model, trzeba przekazać go w ten sposób:

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

lub coś podobnego. Obecnie nie określasz modelu dla widoku _MainMenu, więc jest on używany. Kiedy spróbujesz @foreach, rzuca wyjątek, który widzisz.

Pamiętaj, że @Html.Partial("_MainMenu") nie wywołuje Twojej akcji kontrolera _MainMenu, tylko renderuje widok tej nazwy.

Jeśli chcesz wywołać działania, można użyć działanie dziecko tak:

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

Dziękuję. Używam @ Html.Action ("_ MainMenu", "HomeController") i to działa –

4

już masz odpowiedź. sprawdź, czy funkcja _db.menu.ToList() nie zwraca wartości null. Proponuję użyć wzoru Model-View-ViewModel. utwórz model dla widoku. i zwróć go do widoku, abyś mógł kontrolować model i pokazywać widok.

  1. Nie przekazujesz informacji o modelu do metody częściowej HTML, ponieważ jako wyniki próbujesz iterować po kolekcji. więc rzuci wyjątek odwołania zerowego.

niektóre rzeczy jak ten

public class MenuViewModel 
{ 
     public int menuID { get; set; } 
     public string menuname { get; set; } 
     public string otherProperty { get; set; } 
     public string someotherProperty { get; set; } 
} 

w widoku

@model IEnumerable<MenuViewModel> 

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

dziękuję. to doda moją wiedzę do koncepcji mvc. –