2013-12-18 4 views
0

Я пытаюсь динамически загружать меню навигации из базы данных. Я использую Entity Framework, чтобы вытащить данные. Я разместил меню в своем собственном частичном представлении, которое загружается в общий вид макета. Когда я запускаю приложение, он не работает до загрузки с ошибкой: «Исключение типа« Исключение System.NullReferenceException »произошло в App_Web_h02ter44.dll, но не было обработано в коде пользователя. Дополнительная информация: Ссылка на объект не установлена ​​в экземпляр объекта «.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 (вар элемент в модели) { @ Html.DisplayFor (ModelItem => item.MenuItemText) }

UPDATE

Обновление: Я создал папку внутри папки с именем 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 и т. Д., А затем параметры, которые мне нужно передать, чтобы заставить его вызвать правильный контроллер, но я не могу представить, что вне. Если кто-то может определить проблему, которая была бы замечательной.

Я очень ценю помощь !!!

+0

Обновление: я создал папку внутри папки View с именем Item NavigationMenu с представлением Index.cshtml внутри. В этом представлении буквально содержится тот же код, что и файл _NavigationBarPartial.cshtml, указанный выше. Затем я изменил тег div_Layout на этот

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

ответ

0

Вместо того, чтобы иметь @Html.Partial("_NavigationBarPartial") в _Layouts.cshtml

просто есть <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 вы сделали с разметкой в ​​свою очередь указателем (ваш частичный вид).

Смежные вопросы