Я видел несколько сообщений о навигации и панировочных сухарях, но не нашел такой же проблемы. Однако, если есть, пожалуйста, простите и укажите мне на него. Спасибо.
Мое дело :
Interests Profiles
| |
|_Interest Area 1 |-Profile Area 1
| | |
| |_Interest Area 1.1 |_List of Books
| | |
| |_List of Books |_Book Detail
| |
| |_Book Detail
|_Interest Area 2
|
|_List of Books
|
|_Book Detail
Иерархия хранится в базе данных. Точки входа Интересы и Профили фиксированы. Оттуда я не знаю, какие будут дети.
Когда дочерних элементов больше не осталось, книги извлекаются на основе значения последней выбранной (под)категории.
У меня здесь две проблемы: 1-я: создание соответствующих маршрутов. Как я хотел бы это:
/books/{id}/{interestareaname}/{subinterestareaname}/{books}/{page}
где имя интереса добавляется для удобных для пользователя URL-адресов и продолжает повторяться, пока вы спускаетесь по иерархии. Вывод тогда будет таким: /books/1/project-management/prince2/books/1 это показывает книги принца2 на стр. 1 постраничного списка.
Но когда есть только один уровень, маршрут содержит только одно имя интересующей области и, таким образом, становится таким:
/book/{id}/{interestareaname}/{books}/{page}
Что я сделал для решения проблемы №1:
routes.MapRoute(
"Details",
"view/details/{id}/{booktitle}",
new { controller = "book", action = "Details", id = "*", booktitle= "*"});
routes.MapRoute(
"interests",
"books/{id}/{level1}/{level2}/{level3}/{page}",
new { controller = "book", action = "books", level1 = "*", level2 = "*", level3 = "*", id = "0", page = UrlParameter.Optional }
);
routes.MapRoute(
"profiles",
"books/{id}/{level1}/{level2}/{level3}/{page}",
new { controller = "book", action = "books", level1 = "*", level2 = "*", level3 = "*", id = "0", page = UrlParameter.Optional }
);
Я пришел к этому, заявив, что должен быть установлен максимальный уровень. Это только потому, что я не знал, как сделать его более динамичным.
Теперь проблема состоит в том, чтобы провести различие между категориями интересов и категориями профилей. Я сделал это, создав тот же маршрут, но с другим именем, и добавил имя маршрута при создании карты сайта.
Вторая проблема, которая у меня есть, это карта сайта и хлебные крошки. Я использую MVCsitemapprovider и функциональность DynamicNodes.
С картой сайта у меня проблема с отображением страницы сведений. Потому что книги будут появляться как в профилях, так и по интересам. И некоторые книги появятся в нескольких областях интересов или профилях. В каждом случае я хотел бы увидеть путь, по которому я пришел к этой книге.
Сначала я добавил подробные страницы для каждой книги в карту сайта, но это было сумасшествием. И создает дубликаты записей, которые не очень хорошо обрабатываются картами сайта. Другим вариантом было передать данные маршрута со страницы списка на страницу сведений с помощью строки запроса, но это выглядело ужасно, и мне пришлось добавить логику для анализа строки запроса, чтобы имитировать навигационную цепочку, что будет сложно, поскольку у меня есть только идентификатор, а затем низшего уровня.
Я провел уже много ночей, и я до сих пор не могу понять это. Если кто-то может помочь или указать мне правильное направление, я очень благодарен.