2011-06-21 26 views
6

में दिखाई नहीं देते हैं, मैं अपनी साइट के लिए साइटमैप विकसित करने की कोशिश कर रहा हूं जो यूआरएल पैरामीटर को बनाए रखने के दौरान बनाए रखता है। मैं MvcSiteMapProvider का उपयोग कर रहा हूं और विभिन्न नोड्स के लिए रूट डेटा को संरक्षित करने के लिए गतिशील नोड्स का उपयोग करने का प्रयास कर रहा हूं। हालांकि, मेरी समस्या यह है कि गतिशील नोड्स के बच्चों के साथ है। जब मैं अपनी साइटमैप फ़ाइल में एक गतिशील नोड के भीतर एक नोड घोंसला करता हूं, तो यह HTML.MvcSiteMap() साइटमैप() का उपयोग करके उत्पन्न साइटमैप पर दिखाई नहीं देता है, और जब मैं पृष्ठ पर नेविगेट करता हूं, तो मैं पहले से सभी ब्रेडक्रंब खो देता हूं गतिशील नोड।एमवीसीसाइटमैपप्रोवाइडर - गतिशील नोड्स के बच्चे ब्रेडक्रंब या साइटमैप

उदाहरण के लिए, अगर मेरे गतिशील नोड "व्यक्ति विवरण" कहा जाता है, ब्रेडक्रम्ब इस तरह व्यक्ति विवरण पृष्ठ पर दिखाई देता है:

Home > People > Person Details 

लेकिन जैसे ही मैं पेज में आगे नेविगेट के रूप में, कहते हैं कि "संपर्क व्यक्ति ", ब्रेडक्रंब इस तरह दिखता है:

Person Details > Contact Person 

पहले दो पथों के बिना। अगर मैं व्यक्ति विवरण पर वापस नेविगेट करने का प्रयास करता हूं, तो यूआरएल पैरामीटर में से कोई भी बनाए रखा नहीं जाता है (उदा। http://localhost:55555/Home/People/PersonDetails?id=12 पर जाने के बजाय, यह http://localhost:55555/Home/People/PersonDetails पर जाता है)।

जब मैं Html.MvcSiteMap() साइटमैप() का उपयोग कर पूरे साइटमैप को प्रदर्शित करने का प्रयास करता हूं, तो यह गतिशील नोड तक सही पदानुक्रम को आउटपुट करता है। साइटमैप गतिशील नोड प्रदाता में पाए गए प्रत्येक "व्यक्ति" नोड के लिए एक अद्वितीय नोड सूचीबद्ध करता है, लेकिन गतिशील नोड के किसी भी बच्चे को प्रदर्शित नहीं करता है।

मेरे साइटमैप कुछ इस तरह (संक्षिप्त) दिखता है:

<?xml version="1.0" encoding="utf-8" ?> 
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0" enableLocalization="true"> 
    <mvcSiteMapNode title="Home" controller="Home" action="Index"> 
    <mvcSiteMapNode title="People" controller="Information" action="People"> 
     <mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" dynamicNodeProvider="MySite.Code.PersonDetailsDynamicNodeProvider, MySite"> 
     <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" /> 
     </mvcSiteMapNode> 
    </mvcSiteMapNode> 
    </mvcSiteMapNode> 
</mvcSiteMap> 

और मेरे गतिशील नोड प्रदाता इस तरह दिखता है:

public class PersonDetailsDynamicNodeProvider : DynamicNodeProviderBase 
{ 
    List<Person> people = proxy.GetPeople(); 

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection() 
    { 
     var nodes = new List<DynamicNode>(); 

     foreach (var person in people) 
     { 
      DynamicNode node = new DynamicNode(); 
      node.RouteValues.Add("id", person.ID); 

      nodes.Add(node); 
     } 

     return nodes; 
    } 

    static private PersonServiceClient proxy = new PersonServiceClient(); 
} 

क्या मुझे याद आ रही है? मुझे लगता है कि मैंने अभी कुछ छोड़ दिया है, लेकिन मैं वेब विकास के लिए बहुत नया हूं और वास्तव में इस बिंदु पर अंधेरे में बस रहा हूं।

उत्तर

8

आपको गतिशील नोड प्रदाता की आवश्यकता नहीं है।

<mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" preservedRouteParameters="id"> 
    <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" /> 
</mvcSiteMapNode> 

आप जो कर रहे हैं उसके लिए ठीक काम करता है।