Динамически встроенный SiteMapPath в asp.net
Я пытаюсь построить динамическую карту сайта на своем сайте с помощью SiteMapPath.
Должно быть так:
Home > Products > %product_name% > Prices
Где %product_name%
устанавливается динамически во время выполнения, в зависимости от выбора пользователя.
Я прочитал много статей на эту тему и выбрал эту http://harriyott.com/2007/03/adding-dynamic-nodes-to-aspnet-site.aspx . он динамически изменяет XML-файл web.sitemap
. Проблема в том, что он по-прежнему создает карту сайта только один раз в начале, а затем использует ее на каждом страница.
Как я могу перестроить его на каждой загруженной странице?
2 ответа:
Попробуйте это:
Щелкните правой кнопкой мыши на вашем проекте "добавить новый элемент", затем выберите " Карта сайта", он будет иметь структуру XML, которая выглядит следующим образом:
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="~/Default.aspx" title="Home " description=""> <siteMapNode url="~/the page URL" title="Products" description="" > <siteMapNode url="~/the page URL" title=" %product_name%" description="" > <siteMapNode url="~/the page URL" title="Prices" description="" /> </siteMapNode > </siteMapNode > </siteMapNode > <sitemap>
** Добавление описания для каждого узла необязательно.
Теперь вам нужно разместить его там, где вы хотите, поэтому вы добавляете этот код в HTML-сторону страницы:
<asp:SiteMapPath ID="SiteMapPath1" runat="server"> <CurrentNodeStyle CssClass="Some class" /> <PathSeparatorTemplate> <img runat="server" alt="" src="an image to separate between nodes" height="5" width="5" /> </PathSeparatorTemplate> </asp:SiteMapPath>
Конечно, у вас есть две страницы - одна для продукта и одна для цен.Чтобы назначить плитку динамически для некоторого узла в Карте сайта; добавьте этот код в Страница Цен:
1) При загрузке страницы:
SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
2) Добавьте эту функцию на той же странице (страница цен):
SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e) { SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true); SiteMapNode tempNode = currentNode; tempNode.ParentNode.Title = "Change the Product name"; tempNode.ParentNode.Url = "Change the Product url"; return currentNode; }
Как вы можете видеть, вы можете манипулировать родительским узлом, как вы хотите, изменить заголовок, URL и т. д. Я думаю, что Вы тоже хотите изменить url-адрес; например: "продукт.аспн?ID=blah "
Отлично! В случае, если кто-то хочет того же в vb вот код:
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load AddHandler SiteMap.SiteMapResolve, AddressOf Me.SiteMap_SiteMapResolve End Sub Private Function SiteMap_SiteMapResolve(sender As Object, e As SiteMapResolveEventArgs) As SiteMapNode Dim currentNode As SiteMapNode = SiteMap.CurrentNode.Clone(True) Dim tempNode As SiteMapNode = currentNode tempNode.ParentNode.Title = "Change the Product name" tempNode.ParentNode.Url = "Change the Product url" Return currentNode End Function