ASP.net MVC 4从数据库加载菜单到Partial View

Haq*_*cci 5 asp.net-mvc asp.net-mvc-partialview razor

我是一个mvc新手.

我想要做的是从数据库加载菜单并在局部视图中显示它.将从_layout视图调用此局部视图.

家庭控制器

在家庭控制器我添加一个名为"_MainMenu"的动作

public class HomeController : Controller
{
        mrpDatabase _db = new mrpDatabase();

        public ActionResult _MainMenu()
        {
          return PartialView("_MainMenu", _db.menu.ToList());
        }
        ....
}
Run Code Online (Sandbox Code Playgroud)

PartialView

这是我的_MainMenu PartialView

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

布局页面

这个部分菜单显示在我的_Layout.cshtml中

<nav>                     
  @Html.Partial("_MainMenu")
</nav>
Run Code Online (Sandbox Code Playgroud)

当我跑这个.我收到错误" NullReferenceException未被用户代码处理.对象引用未设置为对象的实例 "

似乎我的_MainMenu中的"模型"为空

我做错了什么 ?

谢谢

rec*_*ive 9

如果您的局部视图使用模型,则需要将其传递为:

@Html.Partial("_MainMenu", Model.ListOfMenus)
Run Code Online (Sandbox Code Playgroud)

或者那种效果.目前,您没有为_MainMenu视图指定模型,因此null使用了.当你尝试a时@foreach,它会抛出你看到的异常.

请注意,这@Html.Partial("_MainMenu")不会调用您的_MainMenu控制器操作,只是呈现该名称的视图.

如果要调用操作,可以使用如下的子操作:

@Html.Action("_MainMenu", "HomeController")
Run Code Online (Sandbox Code Playgroud)