对具有多个路径的页面使用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

尽管它们都指向同一页面,但它们在站点地图中都不同。