2013-12-18 28 views
0

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

模型(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(在模型VAR项) { @ Html.DisplayFor(modelItem => item.MenuItemText) }

UPDATE

更新:我创建了一个文件夹名为NavigationMenu项目里面的Index.cshtml视图查看文件夹内。与上面发布的_NavigationBarPartial.cshtml文件相同的代码。然后,我将_Layout div标签更改为此

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

现在我正按照预期从数据库中提取菜单项。现在我需要回到使用原始的Shared/_NavigationBarBartial并使其像索引文件一样工作。当我们从共享的局部视图正确地调用控制器时,我显然错过了一些东西。除非我使用新的索引视图来加载它,否则我不会在控制器的索引操作中触发断点。我想这是否与我是否使用Html.Partial,Html.Action等,然后我需要传入的参数强制它调用正确的控制器,但我似乎无法弄清楚出。如果任何人都能发现那将会很好的问题。

我真的很感谢帮助!

+0

更新:我在View文件夹内创建了一个名为NavigationMenu Item的文件夹,里面有一个Index.cshtml视图。该视图字面上包含与上面发布的_NavigationBarPartial.cshtml文件相同的代码。然后,我将_Layout div标记更改为此

@Html.Action("Index", "NavigationMenuItem")
ob1Jakobi

回答

0

而不是具有在_Layouts.cshtml

@Html.Partial("_NavigationBarPartial")

只是有一个<div id="NavBarHere"></div>

然后,在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你用你的索引(你的部分视图)作为回报做了标记。

相关问题