【问题标题】:MVC 5 Navigation Menu Model not loading when app starts应用程序启动时未加载 MVC 5 导航菜单模型
【发布时间】:2013-12-18 17:29:12
【问题描述】:

我正在尝试从数据库中动态加载导航菜单。我正在使用实体框架来提取数据。我已将菜单放在它自己的部分视图中,该部分视图会加载到共享布局视图中。当我运行应用程序时,它在加载错误之前失败,“App_Web_h02ter44.dll 中发生‘System.NullReferenceException’类型的异常,但未在用户代码中处理。附加信息:对象引用未设置为对象的实例。”

模型(NavigationMenuItem.cs)

using System;
using System.Collections.Generic;

public class NavigationMenuItem
{
    public NavigationMenuItem()
    {
        this.NavigationMenuItems1 = new HashSet<NavigationMenuItem>();
    }

    public int MenuItemID { get; set; }
    public Nullable<int> MenuItemParentID { get; set; }
    public int MenuID { get; set; }
    public string MenuItemName { get; set; }
    public string MenuItemDescription { get; set; }
    public string MenuItemText { get; set; }
}

控制器(NavigationMenuItemController.cs)

public class NavigationMenuItemController : Controller
{
    private NorthwindEntityModel db = new NorthwindEntityModel();

    // GET: /NavigationMenuItem/
    public ActionResult Index()
    {
        var navigationmenuitems = db.NavigationMenuItems.Include(n => n.NavigationMenuItem1).Include(n => n.NavigationMenu);
        return PartialView(navigationmenuitems.ToList());
    }
}

_Layout.cshtml

<div class="col-md-4">
    @Html.Partial("_NavigationBarPartial")
</div>

_NavigationBarPartial.cshtml

@model IEnumerable

@foreach(模型中的变量项) { @Html.DisplayFor(modelItem => item.MenuItemText) }

更新

更新:我在 View 文件夹中创建了一个名为 NavigationMenu Item 的文件夹,其中包含一个 Index.cshtml 视图。与我在上面发布的 _NavigationBarPartial.cshtml 文件的代码相同。然后我把 _Layout div 标签改成了这个

<div class="col-md-4">
   @Html.Action("Index", "NavigationMenuItem")
</div>

现在我按预期从数据库中提取菜单项。现在我需要重新使用我原来的 Shared/_NavigationBarBartial 并让它像现在的索引文件一样工作。从共享局部视图正确调用控制器时,我显然遗漏了一些东西。除非我使用新的索引视图来加载它,否则我不会在控制器上的索引操作中遇到断点。我认为这与我是否使用 Html.Partial、Html.Action 等有关,然后我需要传入的参数以强制它调用正确的控制器,但我似乎无法理解出去。如果有人能发现问题,那就太好了。

非常感谢您的帮助!!!

【问题讨论】:

  • 更新:我在 View 文件夹中创建了一个名为 NavigationMenu Item 的文件夹,其中包含一个 Index.cshtml 视图。该视图实际上包含与我在上面发布的 _NavigationBarPartial.cshtml 文件相同的代码。然后我将 _Layout div 标签更改为
    @Html.Action("Index", "NavigationMenuItem")

标签: asp.net-mvc navigation asp.net-mvc-5


【解决方案1】:

而不是在_Layouts.cshtml 中有@Html.Partial("_NavigationBarPartial")

只需&lt;div id="NavBarHere"&gt;&lt;/div&gt;

然后,在一个 JavaScript 文件中(假设你已经加载了 JQuery)

$(document).ready(function(){
  var options = {
                url: "/NavigationMenuItem/Index",
                type:"GET"}

  $.ajax(options).done(function (data) {
                    var $target = $('#NavBarHere')
                    var $newHtml = $(data);
                    $target.replaceWith($newHtml);
                });    
});

这应该用您的索引(您的部分视图)返回的标记替换您制作的 div。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2017-04-07
    • 2020-04-29
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多