Логически согласованные URL-адреса со сложными / вложенными маршрутами для вложенных меню, управляемых данными? - PullRequest
1 голос
/ 13 марта 2012

Мне интересно, как люди обрабатывают вложенные / сложные маршруты для приложения при использовании структуры меню, управляемой данными?

У меня есть два класса для моих меню, управляемых данными:

 public class List : Entity
{
    public virtual ICollection<ListItem> ListItems { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public ListType ListType { get; set; }

    public string UlTagCssClass { get; set; }
    public string UlTagCssID { get; set; }
}

 public class ListItem : Entity
{
    public virtual List List { get; set; }
    public virtual ListItem ParentItem { get; set; }
    public virtual ICollection<ListItem> ChildItems { get; set; }

    public int SortOrder { get; set; }
    public string Text { get; set; }
    public string Controller { get; set; }
    public string Action { get; set; }
    public string Url { get; set; }
}

У меня тогда есть рекурсивная функция, которая выплевывает любой список во вложенные теги ul (которые используются в качестве меню).В настоящее время ListItem может иметь URL-адрес через полный URL-адрес, обеспечивать контроллер и действие или не быть ссылкой вообще.

Однако я сталкиваюсь с проблемой, заключающейся в том, что URL-адреса не соответствуют иерархии меню, что является довольно распространенной практикой, и большинство людей ожидают.

Так, например, у меня естьиерархия меню, такая как:

  • О
  • Контакт
    • Отделы
      • Кадры
      • Продажи

Так что сейчас мой предмет верхнего уровня Contact имеет .Controller = "Contact".Это дочерний элемент Departments имеет .Controller = "Content", .Action = "Departments".Эта ссылка, как и следовало ожидать, идет на www.domain.com/Contact/Departments.Но мой предмет третьего уровня Sales теперь имеет .Controller = "Departments, .Action = "Sales".Это делает ссылку www.domain.com/Departments/Sales, которая не имеет смысла в иерархии меню.

Что является хорошим подходом для хранения правильного URL и создания маршрутов для поддержки этого(Я могу изменить класс ListItem при необходимости)?Кроме того, как можно структурировать их представления / контроллеры в таком сценарии?Я не уверен, как продолжить с возрастающей глубиной, потому что я только когда-либо действительно разрабатывал приложения MVC, где я жестко запрограммировал маршруты или просто использовал маршрут контроллера / действия по умолчанию, , но сейчас я пытаюсь сделать его больше данных* 1039 управляемое общество *.

1 Ответ

1 голос
/ 13 марта 2012

Добавьте следующий маршрут и добавьте его перед маршрутами по умолчанию:

Динамически сопоставьте их при запуске приложения, потянув в списке меню и выполнив итерации по списку.Я бы предпочел не отображать их динамически, если они не изменяются на лету. Вам нужны вспомогательные файлы (представления и т. Д.), Которые вы, вероятно, не создаете динамически

 routes.MapRoute("Contact", "Contact/{action}", 
                 new { controller = "Contact"});
 routes.MapRoute("Departments", "Contact/Departments/{action}", 
                 new { controller = "Departments"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...