2013-01-15 14 views
5

Sono un principiante mvc.ASP.net MVC 4 menu di caricamento dal database a Vista parziale

Quello che sto cercando di fare è caricare il menu dal database e visualizzarlo in una vista parziale. Questa vista parziale verrà chiamata dalla vista _layout.

casa controller

controller casa aggiungo un'azione chiamata "_MainMenu"

PartialView

questo è il mio _MainMenu PartialView

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

Layout di pagina

viene visualizzato questo menu parziale nel mio _Layout.cshtml come questo

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

quando ho eseguito questo. Ho ottenuto l'errore "NullReferenceException è stata gestita dal codice utente. riferimento oggetto non impostato a un'istanza di un oggetto"

sembra il "Modello" nel mio _MainMenu è nullo

cosa ho fatto di sbagliato?

grazie

risposta

9

Se la vista parziale utilizza un modello, è necessario passare in questo modo:

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

o qualcosa del genere. Attualmente, non si specifica un modello per la vista _MainMenu, quindi viene utilizzato null. Quando si tenta un @foreach, si genera l'eccezione che si vede.

Si noti che @Html.Partial("_MainMenu") non chiama l'azione del controller _MainMenu, solo visualizzando la visualizzazione di tale nome.

Se si desidera chiamare un'azione, è possibile utilizzare un azione bambino come questo:

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

Grazie. Io uso @ Html.Action ("_ MainMenu", "HomeController") e funziona –

4

hai già la risposta. controllare _db.menu.ToList() non restituisce null. Ti suggerisco di usare il modello Model-View-ViewModel. crea il modello per la vista. e restituirlo a Visualizza, in modo da poter controllare il modello e cosa mostrare alla vista.

  1. Non si stanno passando le informazioni del modello al metodo parziale HTML, come i risultati, si tenta di ripetere la raccolta. quindi genererà un'eccezione di riferimento null.

qualche cosa come questa

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

nella vista

@model IEnumerable<MenuViewModel> 

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

Grazie. questo aggiunge il mio know-how per il concetto di mvc. –

Problemi correlati