我看过一些关于导航和面包屑的帖子,但没有发现同样的问题。但是,如果有,请原谅并指出我。谢谢你。
我的情况 :
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
层次结构存储在数据库中。入口点兴趣和个人资料是固定的。从那里我不知道孩子们会怎样。
当不再有孩子时,将根据最后选择的(子)类别的值检索书籍。
我在这里有两个问题:第一个:创建适当的路线。我想要的方式是:
/books/{id}/{interestareaname}/{subinterestareaname}/{books}/{page}
其中为用户友好的 url 添加了interestareaname,并且只要您沿着层次结构向下移动,就会不断重复。然后输出将是: /books/1/project-management/prince2/books/1 这在分页列表页第 1 页上显示了prince2 书籍。
但是当只有一层时,路线只包含一个兴趣区域名称,因此变成这样:
/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 功能。
使用站点地图时,我在显示详细信息页面时遇到了问题。因为这些书会同时出现在个人资料和兴趣上。有些书籍会出现在多个兴趣领域或个人资料中。在每一种情况下,我都想看看我用来读那本书的路径。
首先,我将每本书的详细信息页面添加到站点地图中,但这太疯狂了。并创建站点地图不能很好地处理的重复条目。另一个选项是通过查询字符串将列表页面上的路由数据传递到详细信息页面,但这看起来很糟糕,然后我必须添加逻辑来解析查询字符串以模仿面包屑,这将很难,因为我只有 ID 然后的最低级别。
我已经度过了很多个夜晚,但我仍然无法弄清楚。如果有人可以帮助或指出正确的方向,我将不胜感激。