/ / MvcSiteMapProvider का उपयोग कर एक गतिशील बहु-स्तरीय साइट मानचित्र बनाना - asp.net-mvc-3, mvmititap

MvcSiteMapProvider का उपयोग कर गतिशील बहु-स्तरीय साइट मानचित्र बनाना - asp.net-mvc-3, mvcsitemap

मेरे पास एक mvc.SiteMap कुछ इस तरह से परिभाषित किया गया है:

<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0"
xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0    MvcSiteMapSchema.xsd"
enableLocalization="true" >

<mvcSiteMapNode title="Home" controller="Home" action="Index" key ="_Home_">
<mvcSiteMapNode title="View Plans" controller="Home" action="ViewCompletePlans"/>
<mvcSiteMapNode title="Edit Plan" controller="Plan" action="EditPlan" dynamicNodeProvider= {pathToProvider}>
<mvcSiteMapNode title="Critical Functions" controller="Plan" action="EditCriticalandNormalFunctions" dynamicNodeProvider={pathToProvider}>
<mvcSiteMapNode title="Edit Critical Function" controller="CriticalFunction" action="EditCriticalFunction" dynamicNodeProvider= {pathToProvider}>
<mvcSiteMapNode title="Manage Uploaded Documents" controller="CriticalFunction" action="UploadedDocuments" dynamicNodeProvider={pathToProvider}></mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMap>

प्रत्येक स्तर पर, नोड उत्पन्न होते हैंगतिशील रूप से एक डेटाबेस में मूल्यों से। मेरी समस्या यह है कि चाइल्ड नोड्स के लिए, साइट मैप बनाते समय नोड प्रदाता को कई बार कहा जाता है। मुझे यकीन नहीं है कि अगर यह है:

  1. एक बार बनाए गए प्रत्येक मूल प्रकार के लिए एक बार कॉल किया जाता है। इसलिए यदि 5 योजनाएं हैं, तो महत्वपूर्ण कार्यों के लिए प्रदाता को 5 बार कहा जाता है, इसलिए नोड 5 बार उत्पन्न होते हैं। यदि हां, तो क्या प्रदाता जानकारी को पारित करने का कोई तरीका है, इसलिए मैं केवल वर्तमान मूल नोड से जुड़े नोड उत्पन्न कर सकता हूं, उस प्रकार के सभी नोड्स नहीं? या वर्तमान माता-पिता नोड तक पहुंचने का एक तरीका है?
  2. किसी अन्य कारण से एक से अधिक बार कॉल किया जा रहा है, हालांकि उच्चतम स्तर के डायनेमिक नोड प्रदाता को केवल एक बार कॉल किया जा रहा है।

कोड अभी काम करता है, लेकिन यह बहुत अक्षम है।

यहाँ एक नमूना प्रदाता है:

public class CriticalFunctionNodeProvider : DynamicNodeProviderBase
{
public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
{
var db = new COPEntities();
var returnValue = new List<DynamicNode>();
foreach (var criticalFunction in db.NormalFunctions)
{
var node = new DynamicNode();
node.Title = "Critical Function: " + criticalFunction.FunctionName;
node.ParentKey = "_Plan_" + criticalFunction.PlanId + "_CritFuncs_";
node.RouteValues.Add("planId", criticalFunction.PlanId);
node.RouteValues.Add("id", criticalFunction.Id);
node.Key = "_Plan_" + criticalFunction.PlanId + "_CritFuncs_" + criticalFunction.Id;
returnValue.Add(node);
}
return returnValue;
}
}

कोई भी मदद बहुत ही सराहनीय होगी।

उत्तर:

जवाब के लिए 0 № 1

वर्तमान में ऐसा करने का कोई तरीका नहीं है, सिवाय एकल डायनेमिकऑनप्रोडाइडर के पदानुक्रम बनाने के लिए। लेकिन यह एक महान अतिरिक्त होगा।