كيفية الحصول على المعلومات صفحة نموذج في XMLSiteMapProvider مخصص

StackOverflow https://stackoverflow.com/questions/1803702

سؤال

وأولا وقبل كل شيء بحاجة لاقول لكم انني استخدام URL إعادة كتابة في هذا المشروع.

لصفحة المادة هذا هو عنوان الموقع: www.mysite.com/section1/section2/month/day/year/modifiedArticleName

لفتات الخبز يمكنني استخدام السيطرة SiteMapPath مع XMLSiteMapProvider مخصصة لأنني لا يمكن أن تبقي كل مقالاتي في ملف xml. في هذا الموفر في الممتلكات CurrentNode، إذا كان رابط هو واحد من مقال، وأنا إنشاء SiteMapNode الجديد، ربطه إلى الأصل المناسب وإعادته.

والمشكلة هي أنني بحاجة إلى أن تقدم إلى تلك العقدة اسم المادة. لا أستطيع الحصول عليه من رابط، لأنه، كأنك تراه أعلاه، يستخدم رابط اسم المادة المعدلة. لذلك أنا بحاجة للحصول عليه من الصفحة.

في الممتلكات CurrentNode وأنا قادرة على الحصول على مثيل صفحة الجري الحالية، ولكن منذ يتم تحميل هذه المادة على Page_Load، وأنا لم يكن لديك عنوان حتى الان.

وفكرت في حل لكنني لست متأكدا بالضبط كيفية تنفيذ ذلك. لذلك، يجب أن لدي 2 XMLSiteMapProvider، الافتراضي واحد وعادتي واحد. واستخدام العرف واحد فقط على الصفحة مقالتي، تهيئة إلا بعد أن تحميل بلدي تفاصيل المادة. يمكن للشخص لي نقطة في الاتجاه الصحيح؟

وابتهاج.

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

المحلول

وتمكنت من تحقيق هدفي من خلال ذلك:

في الملف web.config:

<siteMap defaultProvider="RegularXMLSiteMapProvider">
  <providers>
    <add name="RegularXMLSiteMapProvider" type="System.Web.XmlSiteMapProvider" siteMapFile="~/Web.sitemap" />
    <add name="EnhancedXMLSiteMapProvider" type="MyApp.App_Code.EnhancedXMLSiteMapProvider, MyApp" siteMapFile="~/Web.sitemap"/>
  </providers>
</siteMap>

ومتى أنا على صفحة العادية، وأنا استخدم الموفر الافتراضي. عندما أكون في صفحة المادة، أفعل هذا:

protected void Page_Load(object sender, EventArgs e)
    {
        LoadArticle();

        MasterPages.MyMasterPage myMaster = (MasterPages. MyMasterPage)this.Master;
        myMaster.MySiteMapPath.SiteMapProvider = "EnhancedXMLSiteMapProvider"; 
    }

وأخيرا، في الممتلكات CurrentNode الموفر أحصل على عنوان المقال:

MyApp.ArticlePage page = (MyApp.ArticlePage)HttpContext.Current.Handler;
                    if (page != null)
                    {
                        if (!string.IsNullOrEmpty(page.Article.Title))
                        {
                            articleName = page.Article.Title;
                        }
                    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top