Динамически создаваемый SiteMapPath в asp.net
Я пытаюсь построить динамическую карту сайта на своем сайте, используя SiteMapPath.
Должно быть так:
Home > Products > %product_name% > Prices
где %product_name%
устанавливается динамически во время выполнения, в зависимости от выбора пользователя.
Я прочитал много статей на эту тему и выбрал этот http://harriyott.com/2007/03/adding-dynamic-nodes-to-aspnet-site.aspx. Это динамически меняет web.sitemap
XML-файл Проблема заключается в том, что он все еще строит карту сайта только один раз и затем использует ее на каждой странице.
Как я могу сделать это, чтобы восстановить на каждой загруженной странице?
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>
Конечно, у вас есть две страницы - одна для продукта и одна для цены.
Динамически назначать плитку для некоторого узла в SiteMap; добавьте этот код на странице цен:
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; например: "product.aspx?ID= бла"
Большой! В случае, если кто-то хочет того же в 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