Использование 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;
}
Надеюсь, это поможет...