Мне интересно, как люди обрабатывают вложенные / сложные маршруты для приложения при использовании структуры меню, управляемой данными?
У меня есть два класса для моих меню, управляемых данными:
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 управляемое общество *.