5

i'm an mvc newbie.

What i'm trying to do is to load menu from database and display it in partial view. This partial view will be called from _layout view.

Home Controller

in Home controller i add an action called "_MainMenu"

public class HomeController : Controller { mrpDatabase _db = new mrpDatabase(); public ActionResult _MainMenu() { return PartialView("_MainMenu", _db.menu.ToList()); } .... } 

PartialView

this is my _MainMenu PartialView

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

Layout Page

this partial menu is displayed in my _Layout.cshtml like this

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

when i run this. i got error "NullReferenceException was unhandled by user code. Object reference not set to an instance of an object"

seems the "Model" in my _MainMenu is null

what did i do wrong ?

thank you

2 Answers 2

9

If your partial view uses a model, you need to pass it in like this:

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

or something to that effect. Currently, you are not specifying a model for the _MainMenu view, so null is used. When you attempt a @foreach, it throws the exception you see.

Note that @Html.Partial("_MainMenu") isn't calling your _MainMenu controller action, just rendering the view of that name.

If you want to call an action, you can use a child action like this:

@Html.Action("_MainMenu", "HomeController") 
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you. i use @Html.Action("_MainMenu", "HomeController") and it works
4

you already got the answer. check the _db.menu.ToList() is not returning null. I suggest you to use Model-View-ViewModel Pattern. create model for view. and return it to View, so that you can control over the model and what to show to the view .

  1. You are not passing model information to the HTML Partial method, as the results, you try to iterate over the collection. so it will throw a null reference exception.

some thing like this

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

in Your View

@model IEnumerable<MenuViewModel> <nav> @Html.Partial("_MainMenu",Model) </nav> 

1 Comment

Thank you. this add my knowldge for mvc concept.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.