我有一个 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>
在每个级别,节点都是从数据库中的值动态生成的。我的问题是,对于子节点,在构建站点地图时会多次调用节点提供程序。我不确定是否是:
- 为创建的每个父类型调用一次。所以如果有 5 个计划,那么关键功能的提供者会被调用 5 次,因此节点会生成 5 次。如果是这样,是否有某种方法可以传递提供者信息,以便我只能生成与当前父节点关联的节点,而不是所有具有该类型的节点?或者有没有办法访问当前的父节点?
- 由于另一个原因被多次调用,尽管最高级别的动态节点提供程序只被调用一次。
该代码现在可以工作,但是效率非常低。
这是一个示例提供程序:
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;
}
}
任何帮助是极大的赞赏。