Как правильно представить динамическое меню хранимое в БД на ASP.NET MVC?

Добрый день, @User.Name

Подскажи плиз, как в _MainLayout вывести меню хранимое в БД.
Передавать модель в каждом контроллере не представляется возможным.
Решил сделать напрямую через хэлпер:
public class Menu
    {
        public static IEnumerable<Category> Categories
        {
            get
            {
                using (ModelContext db = new ModelContext())
                    return db.Categories;
            }
        }
    }

представление _MainLayout:
@foreach (var item in Menu.Categories)
                    {
                        <li>@Html.ActionLink(item.Title, "Index", "Catalog", new { category = item.Alias }, null)</li>
                    }


Но сомневаюсь что так делать правильно. Посоветуйте новичку?!
  • Вопрос задан
  • 1009 просмотров
Пригласить эксперта
Ответы на вопрос 2
Я бы посоветовал воспользоваться MvcSiteMapProvider, нужно будет написать совой DynamicNodeProvider. MvcSiteMapProvider решает большинство проблем с меню, картой сайта и "хлебными крошками".
Ответ написан
Комментировать
Splo1ter
@Splo1ter
.NET Developer (9 years+)
Используйте хелпер в Razor -
@helper RenderMenu(IEnumerable<Menu> items)
{
    foreach(var item in items)
    {
          <li><a href='@item.Url'>@item.Title</a></li>
          @if(item.Childs.Any())
          {
              @RenderMenu(item.Childs)
          }
    }
}


Ну и все это дело рекурсивно выводится в html.

И переименнуйте класс - у вас он как menu но возвращает категории, может лучше просто в категорию перенсти этот метод ?

Или вообще лучше сделать отдельный контреллер с дочерним ActionResult в котором выдавать только меню.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы