Динамически встроенный SiteMapPath в asp.net - PullRequest
4 голосов
/ 21 сентября 2010

Я пытаюсь построить динамическую карту сайта на своем сайте, используя SiteMapPath.

Должно быть так:

Home > Products > %product_name% > Prices

где %product_name% устанавливается динамически во время выполнения, в зависимости от выбора пользователя.

Я прочитал много статей на эту тему и выбрал http://harriyott.com/2007/03/adding-dynamic-nodes-to-aspnet-site.aspx.. Он динамически изменяет XML-файл web.sitemap Проблема в том, что он все еще создает карту сайта только один раз и затем использует ее на каждой странице.

Как мне сделать так, чтобы перестраивать на каждой загруженной странице?

Ответы [ 2 ]

7 голосов
/ 21 сентября 2010

Попробуйте:

Щелкните правой кнопкой мыши свой проект «Добавить новый элемент», затем выберите «Карта сайта», он будет иметь структуру 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>

OfКонечно, у вас есть две страницы - одна для продукта и одна для цены.

Для динамического назначения плитки для некоторого узла в 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 = blah"

1 голос
/ 12 мая 2012

Отлично!В случае, если кто-то хочет то же самое в 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
...