0
一个动态多级站点地图我有定义是这样的一个mvc.SiteMap:创建使用MvcSiteMapProvider
<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;
}
}
任何帮助是极大的赞赏。