对具有多个路径的页面使用ASP.NET SiteMap
时间:2020-03-06 14:23:53 来源:igfitidea点击:
我有一个可以从三个不同页面访问的页面(我们称其为MyPage)。在Web.sitemap文件中,我试图将此页面的XML填充在三个单独的节点下,如下所示:
<第1页>
<MyPage />
...
</页1>
<页面2>
<MyPage />
...
</页2>
<页面3>
<MyPage />
...
</第3页>
这样做时,我收到以下错误:
找到具有相同URL'Default.aspx'的多个节点。
XmlSiteMapProvider要求站点地图节点具有唯一的URL。
我在网上阅读了SiteMapNodes在内部存储为字典的情况,这解释了为什么我不能使用相同的URL。无论如何,我只是在寻找解决该问题的替代方法。任何建议将不胜感激。
解决方案
这不是Web.sitemap文件的真正目的。
从SiteMap类的MSDN文档中,
Fundamentally, the SiteMap is a container for a hierarchical collection of SiteMapNode objects. However, the SiteMap does not maintain the relationships between the nodes; rather, it delegates this to the site map providers.
因此,换句话说,web.SiteMap仅描述页面的层次结构,而不描述这些页面之间的关系。
但是,如果我们只是想从其他页面链接" MyPage",则无论如何都不需要将MyPage作为其他页面的子节点。
希望可以澄清一些事情。
我知道我们可以将〜/ folder / index.aspx和〜/ folder /的两个不同条目都指向同一个地方。有点hack,是的,但是也许有一种方法可以使这个更进一步?
- 〜/文件夹/index.aspx
- 〜/文件夹/
- 〜/文件夹
你可以试试这个...
<siteMapNode url="ListAll.aspx"> <siteMapNode url ="Detail.aspx?node=all" /> </siteMapNode> <siteMapNode url="ListMine.aspx"> <siteMapNode url ="Detail.aspx?node=mine" /> </siteMapNode>
但是,如果我们尝试转到" Detail.aspx?node = all&id = 13"(我仍在尝试解决),则会中断。
一种简单而有效的方法是通过使用不同的查询字符串来区分:
- default.aspx?page = 1
- default.aspx?page = 2
- default.aspx?page = 3
尽管它们都指向同一页面,但它们在站点地图中都不同。