MvcSiteMapProvider - Дети динамических узлов не отображаются в сухарях или на карте сайта - PullRequest
6 голосов
/ 22 июня 2011

Я пытаюсь разработать карту сайта для своего сайта, которая поддерживает параметры URL, когда это необходимо.Я использую MvcSiteMapProvider и пытаюсь использовать динамические узлы для сохранения данных маршрута для разных узлов.Тем не менее, у меня проблема с детьми динамических узлов.Когда я вкладываю узел в динамический узел в моем файле карты сайта, он не отображается на карте сайта, созданной с использованием Html.MvcSiteMap (). SiteMap (), и при переходе на страницу я теряю все крошки ДОдинамический узел.

Например, если мой динамический узел называется «Сведения о человеке», то на странице «Сведения о человеке» хлебная крошка выглядит следующим образом:

Home > People > Person Details

Но как только я перехожудалее на странице, скажем «Контактное лицо», хлебная крошка выглядит так:

Person Details > Contact Person

без первых двух путей.Кроме того, если я пытаюсь вернуться обратно к информации о человеке, ни один из параметров URL не сохраняется (например, вместо перехода к http://localhost:55555/Home/People/PersonDetails?id=12, он переходит к http://localhost:55555/Home/People/PersonDetails).

Когда я пытаюсь отобразить всю карту сайтас помощью Html.MvcSiteMap (). SiteMap () выводит правильную иерархию вплоть до динамического узла. Карта сайта перечисляет уникальный узел для каждого узла «Персона», найденного в поставщике динамического узла, но не отображает ни одного дочернего элементадинамического узла.

Моя карта сайта выглядит примерно так (сокращенно):

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0" enableLocalization="true">
  <mvcSiteMapNode title="Home"  controller="Home" action="Index">
    <mvcSiteMapNode title="People" controller="Information" action="People">
      <mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" dynamicNodeProvider="MySite.Code.PersonDetailsDynamicNodeProvider, MySite">
        <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" />
      </mvcSiteMapNode>
    </mvcSiteMapNode>
  </mvcSiteMapNode>
</mvcSiteMap>

А мой поставщик динамических узлов выглядит так:

public class PersonDetailsDynamicNodeProvider : DynamicNodeProviderBase
{
    List<Person> people = proxy.GetPeople();

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
    {
        var nodes = new List<DynamicNode>();

        foreach (var person in people)
        {
            DynamicNode node = new DynamicNode();
            node.RouteValues.Add("id", person.ID);

            nodes.Add(node);
        }

        return nodes;
    }

    static private PersonServiceClient proxy = new PersonServiceClient();
}

Есть лиЧто-то, чего мне не хватает? У меня такое ощущение, что я что-то пропустил, но я очень новичок в веб-разработке и на самом деле просто покажусь в темноте.

1 Ответ

9 голосов
/ 18 августа 2011

Вам не нужен поставщик динамических узлов.

<mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" preservedRouteParameters="id">
  <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" />
</mvcSiteMapNode>

отлично работает для того, что вы делаете.

...