Динамически встроенный 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 = бла"

 mizzle23 янв. 2014 г., 17:34
Какой смысл в tempNode?
 Si812 нояб. 2014 г., 19:04
Как насчет моего вопроса здесь:stackoverflow.com/questions/26892575/..., У меня настроен внешний вид и мне просто нужно каждый раз добавлять LI в мой UL :)
 GaGar1n21 сент. 2010 г., 08:52
в этом случае значение% product_name% является постоянным, и мне нужно, чтобы оно было установлено во время выполнения, когда загружается Product.aspx и выбранный продукт известен

    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

Ваш ответ на вопрос