Я пытаюсь преобразовать это Tutorial, чтобы прочитать данные из таблицы. Я изменил модель NavigationMenu.cs путем добавления ключевого поля Id:Из модели с жесткой кодировкой в управляемое данными меню
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
Как изменить код для отображения второго уровня menù в представлении?
Как MenuChildren недвижимость заселяется? В таблице базы данных все пункты меню выглядят на одном уровне? Как они имеют родительские отношения с ребенком? У вас должен быть столбец parentMenuId в таблице, который укажет, кто является родительским элементом меню. Если parentMenuId равно 0 или null, то это можно рассматривать как меню верхнего уровня. Также вам необходимо изменить привязку EF, измененную для поддержки отношений One-Many. –
, пожалуйста, проверьте мой ответ, надеюсь, это поможет вам –