Можно ли использовать карту сайта ASP.NET для создания хлебных крошек?

Я хочу, чтобы мой сайт ASP.NET имел простую строку меню, также известную как Breadcrumbs. Я создал карту сайта со всеми необходимыми элементами и зарегистрировался в Web.config. Например:

<siteMap>
    <siteMapNode url="Default.aspx" title="Home" >
        <siteMapNode url="hosting/Default.aspx" title="Hosting" />
        <siteMapNode url="software/Default.aspx" title="Software">
            <siteMapNode url="firefox/Default.aspx" title="Firefox">
                <siteMapNode url="Download.aspx" title="Download" />
                <siteMapNode url="Support.aspx" title="Support" />
            </siteMapNode>
        </siteMapNode>
    </siteMapNode>
</siteMap>

И создал элемент управления, размещенный на Masterpage. Вот код генерации меню:

protected void Control_Load(Object sender, EventArgs e)
{
    string path = String.Empty;
    StringCollection list = new StringCollection();

    foreach (string str in Request.Url.Segments)
    {
        path += str;
        string link = String.Format("<a href=\"{0}://{1}{2}\">{3}</a>", Request.Url.Scheme, Request.Url.Authority, path, this.names[str]);
        list.Add(link);
    }

    foreach (string str in list)
    {
        menu += String.Concat(str, SeparatorLine);
    }
    menu = menu.Remove(menu.LastIndexOf(SeparatorLine));
}

Но он использует StringDictionary, например { { "/", "Home" }, { "hosting/", "Hosting" }, { "software/", "Software" } .. }

Как я могу использовать запрос к Sitemap вместо него? А может еще что-то, не Sitemap, а заранее придуманное.


person abatishchev    schedule 16.02.2009    source источник


Ответы (3)


Управление ASP.NET SiteMapPath

<asp:SiteMapPath ID="SiteMapPath1" Runat="server" />
person Rex M    schedule 16.02.2009

Вы можете использовать элемент управления SiteMapPath ( должен быть в категории «Навигация» вашего набора инструментов). Посетите эту страницу, чтобы найти руководство.

person M4N    schedule 16.02.2009

Просто задайте для свойства SiteMapProvider поставщика карты сайта, которую вы хотите использовать для хлебных крошек, и все готово. Обычно я просто помещаю SiteMapPath в div и устанавливаю CSS для div, чтобы стилизовать хлебные крошки.

Однако есть один момент, на который стоит обратить внимание. Если вы подавите какие-либо корневые узлы в карте сайта, они все равно будут отображаться в ваших хлебных крошках. Я столкнулся с этим, пытаясь использовать одну и ту же карту сайта для хлебных крошек и для SiteMapDataSource для древовидного представления, где я хотел не показывать начальный узел.

Удачи!

person Tim Scarborough    schedule 18.05.2009
comment
@Tim: Здесь есть пример того, как скрыть визуализированные корневые узлы в обработчике OnItemCreated: johanleino.wordpress.com/2009/01/11/. По сути, он устанавливает свойство Visible узла в false, если узел является корневым узлом. - person Groo; 16.07.2010