我有一个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>
在每个级别,节点都是根据数据库中的值动态生成的。我的问题是,对于子节点,在构建站点地图时会多次调用节点提供程序。我不确定是不是:
代码现在正常运行,但效率非常低。
以下是样本提供者:
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 :(得分:0)
目前除了在单个DynamicNodeProvider中创建层次结构外,无法执行此操作。 但这将是一个很好的补充。