【发布时间】:2017-01-20 12:04:12
【问题描述】:
我正在尝试改变它 Tutorial 从表中读取数据。我通过添加 Id 键字段修改了 NavigationMenu.cs 模型:
public class NavigationMenu
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Text { get; set; }
public string Action { get; set; }
public string Controller { get; set; }
public string Icon { get; set; }
public bool Selected { get; set; }
public List<NavigationMenu> MenuChildren;
}
添加了上下文:
public class NavigationMenuContext : DbContext
{
public NavigationMenuContext() : base("name=DefaultConnection")
{
}
public DbSet<NavigationMenu> NavigationMenus { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
并修改了具体的控制器:
public class NavigationController : Controller
{
// GET: NewMenu
public ActionResult Index()
{
NavigationMenuContext navigationMenuContext = new NavigationMenuContext();
List<NavigationMenu> menuItems = navigationMenuContext.NavigationMenus.ToList();
return View(menuItems);
}
[ChildActionOnly]
public ActionResult GenerateMenu()
{
NavigationMenuContext navigationMenuContext = new NavigationMenuContext();
List<NavigationMenu> menuItems = navigationMenuContext.NavigationMenus.ToList();
string action = ControllerContext.ParentActionViewContext.RouteData.Values["action"].ToString() == "Index" ? "" : ControllerContext.ParentActionViewContext.RouteData.Values["action"].ToString();
string controller = ControllerContext.ParentActionViewContext.RouteData.Values["controller"].ToString();
foreach (var item in menuItems)
{
if (item.MenuChildren != null)
{
foreach (var cItem in item.MenuChildren)
{
if (cItem.Controller == controller && cItem.Action == action)
{
cItem.Selected = true;
break;
}
else
{
cItem.Selected = false;
}
}
}
if (item.Controller == controller && item.Action == action)
{
item.Selected = true;
break;
}
else
{
item.Selected = false;
}
}
return PartialView("~/Views/Shared/_Navigation.cshtml", menuItems);
}
}
但我无法使用二级菜单获得相同的结果: NavigationMenus Table
如何修改代码以在视图中呈现二级菜单?
【问题讨论】:
-
如何填充 MenuChildren 属性?在数据库表中,所有菜单项看起来都在同一级别?他们的亲子关系如何?您应该在表中有一个 parentMenuId 列,该列将指示谁是父菜单项。如果 parentMenuId 为 0 或 null 则可以将其视为顶级菜单。您还需要更改 EF 绑定以支持一对多关系。
-
请查看我的回答,希望对您有所帮助
标签: c# asp.net-mvc entity-framework poco data-driven