سؤال

أحاول إنشاء خريطة موقع ديناميكية على موقعي باستخدام Sitemappath.

يجب أن يكون هكذا:

Home > Products > %product_name% > Prices

أين %product_name% يتم تعيينه ديناميكيًا في وقت التشغيل ، اعتمادًا على اختيار المستخدم.

لقد قرأت العديد من المقالات حول الموضوع واختر هذا http://harriyott.com/2007/03/adding-dynamic-nodes-to-aspnet-site.aspx. يغير ديناميكيا web.sitemap ملف XML. المشكلة هي أنه لا يزال يبني خريطة sitemap مرة واحدة فقط في البداية ثم يستخدمها في كل صفحة.

كيف يمكنني الوصول إلى كل صفحة محملة؟

هل كانت مفيدة؟

المحلول

جرب هذا:

انقر بزر الماوس الأيمن على مشروعك "إضافة عنصر جديد" ثم اختر "خريطة الموقع" ، وسيحتوي على هيكل 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 = 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top