2011-06-16 32 views
8

में यूआरएल पैरामीटर बनाए रखना मैं अपने प्रोजेक्ट के लिए ब्रेडक्रंब ट्रेल बनाने के लिए http://mvcsitemap.codeplex.com/ से एमवीसीसाइटमैपप्रोवाइडर का उपयोग कर रहा हूं। मेरे पास कुछ यूआरएल हैं जिनके लिए उचित उपयोगकर्ता के लिए वर्तमान जानकारी के लिए पास की जाने वाली आईडी की आवश्यकता है, उदा। http: // localhost: 52306/होम/उपयोगकर्ता? आईडी = 101101एमवीसी साइटमैप प्रदाता - ब्रेडक्रंब ट्रेल

जब मैं साइटमैप में आगे बढ़ता हूं (उदाहरण के लिए http: // localhost: 52306/होम/उपयोगकर्ता/विवरण? आईडी = 101101) और उपयोग करने का प्रयास करें मुझे "उपयोगकर्ता" पृष्ठ पर वापस ले जाने के लिए ब्रेडक्रंब लिंक, आईडी पैरामीटर खो गया है। मैंने एक्शन विधियों में SiteMapPreserveRouteData विशेषताओं को जोड़ने का प्रयास किया है, लेकिन वे कुछ भी नहीं कर रहे हैं। क्या यह सुनिश्चित करने का कोई आसान तरीका है कि यह आईडी जानकारी संरक्षित है? मैंने सोचा था कि SiteMapPreserveRouteDataAttribute को ऐसा करना था, तो क्या कुछ विशेषता है जो मैं विशेषता के साथ गलत कर रहा हूं? मेरी विधि इस तरह दिखेगी:

[SiteMapPreserveRouteData] 
public ActionResult User() 
{ 
    //code 
} 

मुझे बताएं कि आपको मुझसे और जानकारी चाहिए या नहीं।

+0

मुझे एक ही चुनौती है ... क्या आपको कोई समाधान मिला है? – noocyte

उत्तर

0

MVCSiteMapperProvider पर इस धागे के अनुसार आप क्वेरी स्ट्रिंग का उपयोग नहीं कर सकते हैं। यह क्वेरी स्ट्रिंग को अनदेखा करता है और केवल रूट डेटा का उपयोग करता है।

Query Strings and MVCSiteMapper

आपको कुछ नए मार्गों बनाने के बजाय क्वेरी स्ट्रिंग का उपयोग कर के बारे में सोचा है?

1

जिस तरह से मैंने इसे किया, मैंने original mvc site map helper source को ब्रेडक्रंब को प्रस्तुत करने के लिए लिया, और इसे पैरामीटर को संभालने के लिए बदल दिया (हालांकि मेरी प्रोजेक्ट में हम केवल फ़िल्टरिंग के लिए पैरामीटर प्रदर्शित करते हैं और अन्य फ़िल्टरिंग पैरामीटर को खोने के लिए उपयोगकर्ता को क्लिक करने की अनुमति देते हैं, नीचे बहुत है नोड पाठ की भोली कार्यान्वयन, सिर्फ एक उदाहरण यह कैसे किया जा सकता है):

private static string SiteMapText(this MvcSiteMapHtmlHelper helper, SiteMapNode node, string linkCssClass, IDictionary<string, object> htmlAttributes) 
    { 
     var extraAttributes = new StringBuilder(); 
     foreach (var attribute in htmlAttributes) 
     { 
      extraAttributes.Append(" " + attribute.Key + "=\"" + attribute.Value + "\""); 
     }    

     string spanHtml; 
     var paramDictionary = helper.HtmlHelper.ViewContext.RequestContext.HttpContext.Request.Params.ToDictionary(); 
     var queryParams = paramDictionary.Select(x => string.Format("{0}:{1}", x.Key, x.Value)); 

     // here you add request parameters 
     var title = helper.HtmlHelper.Encode(string.Format("{0} ({1})", node.Title, string.Join(";", queryParams))); 

     if (!string.IsNullOrEmpty(linkCssClass)) 
     { 
      spanHtml = string.Format("<span><span class=\"{0}\"{1}>{2}</span>", linkCssClass, extraAttributes, title); 
     } 
     else 
     { 
      spanHtml = string.Format("<span><span{1}>{0}</span>", title, extraAttributes); 
     } 

     return spanHtml; 
    } 

उसी तरह आप SiteMapLink तरीकों समायोजित कर सकते हैं, मौजूदा नोड के लिए अनुरोध पैरामीटर शामिल करने के लिए।