Использование SiteMapPath для создания динамического заголовка страницы?

В настоящее время я использую SiteMapPath для создания хлебных крошек для моих страниц ASP.net 3.5 (vb.net), и это прекрасно работает.

Теперь я пытаюсь выяснить, как можно использовать тот же элемент управления для создания динамического заголовка страницы (в теге). Мне нужен обратный путь в списке, но элемент управления SiteMapPath включает в себя ссылки и набор стилей. Есть ли способ удалить все это и просто получить простой путь с разделителями?

Например, допустим, мы находимся на странице "Пресс-релизы" внутри раздела "О нас" на моем сайте.

Крошка появляется как:

Главная> О нас> Пресс-релизы

Я хочу, чтобы заголовок страницы был:

Пресс-релизы - О компании - Название компании

Поэтому мне нужно, чтобы он изменил порядок, удалил все промежутки, ссылки и стили (так как это внутри тега) и отбросил корневой узел "Домой", а затем добавил название компании в конец. Так как навигация по меню и хлебные палитры - все это происходит из файла карты сайта, я подумал, что имеет смысл попытаться заставить заголовок сделать то же самое.

Какие-нибудь мысли? Благодарю.

1 ответ

Лучший способ добиться желаемого результата - игнорировать элемент управления SitePath и вместо этого использовать коллекцию SiteMapNode в SiteMap. Сервер анализирует файл web.sitemap в коллекцию SiteMapNodes и подключает SiteMap.CurrentNode, находя узел, соответствующий URL-адресу текущей страницы. Каждый SiteMapNode имеет свойство ParentNode. Вот справочная страница на MSDN.

Итак, все, что вам нужно сделать, это проверить, есть ли у CurrentNode родительский элемент, если он добавлен, вы добавляете заголовок ParentNode в заголовок CurrentNode и продолжаете, пока не достигнете RootNode (где вы подставляете название своей компании для заголовка корневого узла).

Ниже приведено быстрое решение; это может войти в MasterPage, если вы используете один. Я не уверен, что ваш язык, но это должно быть легко переписать в VB.Net. Я дал ему простой тест, и он, казалось, сработал. Вы можете настроить символы, которые разделяют заголовки страниц.

protected void Page_Load(object sender, EventArgs e)
{
    Page.Title = SiteMapTitle(SiteMap.CurrentNode, "", " - ");
}

private string GetNodeTitle(SiteMapNode oNode)
{
    if (oNode == SiteMap.RootNode)
        return "Company Name";
    else
        return oNode.Title;
}

private string SiteMapTitle(SiteMapNode oNode, string szTitle, string szItemSeparator)
{
    if (szTitle != string.Empty)
        szTitle = szTitle + szItemSeparator + GetNodeTitle(oNode);
    else
        szTitle = GetNodeTitle(oNode);

    if (oNode.ParentNode != null)
        szTitle = SiteMapTitle(oNode.ParentNode, szTitle, szItemSeparator);

    return szTitle;
}

Надеюсь, это поможет...

Другие вопросы по тегам