asp.net-mvc - ASP.net MVC 4 从数据库加载菜单到局部 View

标签 asp.net-mvc razor asp.net-mvc-partialview

我是 mvc 新手。

我想要做的是从数据库加载菜单并在部分 View 中显示它。这个局部 View 将从 _layout View 中调用。

家庭 Controller

在 Home Controller 中,我添加了一个名为“_MainMenu”的操作

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

        public ActionResult _MainMenu()
        {
          return PartialView("_MainMenu", _db.menu.ToList());
        }
        ....
}

局部查看

这是我的 _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 中的“模型”为空

我做错了什么 ?

谢谢你

最佳答案

如果您的局部 View 使用模型,则需要像这样传递它:

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

或类似的东西。目前,您没有为 _MainMenu 指定模型。查看,所以null用来。当您尝试使用 @foreach 时,它会抛出您看到的异常。

请注意 @Html.Partial("_MainMenu")不是调用您的 _MainMenu Controller Action ,只呈现该名称的 View 。

如果你想调用一个 Action ,你可以使用这样的子 Action :
@Html.Action("_MainMenu", "HomeController")

关于asp.net-mvc - ASP.net MVC 4 从数据库加载菜单到局部 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14331766/

相关文章:

asp.net-mvc - 菜单上没有添加 Controller ,也无法在 MVC 4.5 中添加 View

c# - 如何在不使用 "new"关键字的情况下启动一个类?

javascript - 禁用表中的按钮

asp.net - 为什么我的验证会在 MVC3 中发布之前对 get 请求触发?

asp.net-mvc - 为什么验证请求从 ASP.net MVC 中取出?

asp.net-mvc - 将 MVC 网站脱机并重新联机

c# - 使用 ASP MVC 下载并显示私有(private) Azure Blob

asp.net-mvc - 如何在 Html.RenderAction (MVC3) 中发送模型对象

c# - SignalR 在子域上协商 404