2013-12-18 61 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你用你的索引(你的部分視圖)作爲回報做了標記。

相關問題