【发布时间】: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