Использование ASP.NET SiteMap для страницы с несколькими путями

У меня есть определенная страница (назовем ее MyPage), к которой можно получить доступ с трех разных страниц. В файле Web.sitemap я попытался разместить XML для этой страницы в трех отдельных узлах следующим образом:

‹ Страница 1 >
‹ Моя страница / >
...
‹ /Страница 1 >

‹ Страница 2 >
‹ Моя страница / >
...
‹ /Страница 2

‹ Страница 3 >
‹ Моя Страница / >
...
‹ /Страница 3 >

При этом я получил следующую ошибку:

Обнаружено несколько узлов с одним и тем же URL-адресом «Default.aspx». XmlSiteMapProvider требует, чтобы узлы карты сайта имели уникальные URL-адреса.

Я читал в Интернете, что узлы SiteMapNodes хранятся внутри как словарь, что объясняет, почему я не могу использовать один и тот же URL-адрес. В любом случае, я просто ищу альтернативные пути решения этой проблемы. Любые предложения будут ценны.


person YourMomzThaBomb    schedule 18.09.2008    source источник
comment
Мне нужно, чтобы страница включала карту сайта, потому что я сохраняю контекст с каждой из трех предыдущих страниц. Таким образом, пользователь может щелкнуть предыдущую страницу в карте сайта, и она загрузит данные, которые я сохранил (т.е. загрузит данные из своего предыдущего поиска).   -  person YourMomzThaBomb    schedule 19.09.2008


Ответы (4)


Это не совсем то назначение файла Web.sitemap.

Из документов MSDN класса SiteMap,

По сути, SiteMap — это контейнер для иерархической коллекции объектов SiteMapNode. Однако SiteMap не поддерживает отношения между узлами; скорее, он делегирует это поставщикам карты сайта.

Итак, перефразируя, web.SiteMap описывает только иерархию страниц, а не отношения между этими страницами.

Однако, если вы намерены просто связать «MyPage» с других ваших страниц, вам все равно не нужно иметь MyPage в качестве дочерних узлов этих других страниц.

Надеюсь, это поможет немного прояснить ситуацию.

person Scott Ferguson    schedule 18.09.2008
comment
Мне нужно, чтобы страница включала карту сайта, потому что я сохраняю контекст с каждой из трех предыдущих страниц. Таким образом, пользователь может щелкнуть предыдущую страницу в карте сайта, и она загрузит данные, которые я сохранил (т.е. загрузит данные из своего предыдущего поиска). - person YourMomzThaBomb; 19.09.2008

Я знаю, что у вас могут быть две разные записи ~/folder/index.aspx и ~/folder/, которые указывают на одно и то же место. Немного взлома, да, но, может быть, вы можете пойти дальше?

  • ~/папка/index.aspx
  • ~/папка/
  • ~/папка
person Matt Hanson    schedule 20.09.2008

Вы могли бы попробовать это...

<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» (что я все еще пытаюсь решить).

person Beaker    schedule 14.10.2008

Одним из простых, но эффективных способов является дифференциация с использованием другой строки запроса:

  • default.aspx?page=1
  • default.aspx?page=2
  • default.aspx?page=3

Все они разные в карте сайта, хотя все они указывают на одну и ту же страницу.

person Armstrongest    schedule 15.11.2008