Как стать автором
Обновить

Комментарии 11

и что вас заставило указать кодировку, да еще так?
"NAME" VARCHAR(200) CHARACTER SET WIN1251 NOT NULL,
?
ну про всякие, парсинги без учета культуры я умолчу…
я взял пример со статьи. Просто что б можно наглядно увидеть было структуру таблицы. Кодировка, тип поля и т.д. тут не особо важно.
А что мешало использовать мощь Entity Framework для создания древовидной структуры?
К примеру
public long Id { get; set; }
public long? ParentId { get; set;}
public virtual TreeNode Parent { get; set; }
public ICollection<TreeNode> Nodes { get; set;}
// ...
public override void OnModelCreating(ModelBuilder modelBuilder) {
   // ...
   modelBuilder.Entity<TreeNode>()
          .HasKey(t => t.Id);
   modelBuilder.Entity<TreeNode>()
         .HasMany<TreeNode>(t => t.Nodes)
         .WithOptional(t => t.Parent)
         .HasForeignKey(t => t.ParentId)
         .WillCascadeOnDelete(false);
}


upd: ParentId, конечно, nullable
не встречал такого просто. Я только недавно в ASP. Ща попробую.
Ну еще в плюс — избавиться от ViewBag. Использовать вместо этого MenuViewModel.cs
   public IEnumerable<zf2.Models.NewsM> Items {get;set;}
   public string Id {get;set;}

А дальше на вьюхе использовать модель.
@model MenuViewModel
Вместо
if(menuList.Count(p=>p.ParentID == cp.NewsMID) > 0)

использовать
if(menuList.Any(p=>p.ParentID == cp.NewsMID))

т.к. Count считает все элементы, а Any возвращает результат сразу, как только найдет первый элемент в коллекции, удовлетворяющий условию.
У меня немного попроще — sitemap + вывод пунктов в зависимости от роли пользователя на сайте.
но за идею про многоуровневое меню надо подумать, спасибо.
Я думаю, проще использовать
MvcSiteMapProvider

если интересно могу пример написать
Было бы интересно посмотреть на реализацию.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории