DB から基本ノードをロードするブレッドクラムがあります (thx から nightowl に助けてもらいましょう!)。この機能を実現するために、「ISiteMapNodeProvider」を実装する「CustomSiteMapNodeProvider」を実装しました。ブレッドクラムは、DB からのノードに対して機能するようになりました。ここで、DB から取得したいくつかのノードの子として動的ノードを追加したいと考えました。私の最初の衝動は、MvcSiteMapNodeAttribute を使用することでした。
[MvcSiteMapNodeAttribute(Title = "Execute", Area = "MyArea", DynamicNodeProvider = "My.Namespace.MyDynamicNodeProvider, My.Assembly", Clickable = false, ParentKey="KeyOfParentDbNode")]
public ActionResult Execute(Guid id, MyViewModel vm){
return View(vm)
}
しかし、これは機能しませんでした。「MyDynamicNodeProvider」内のブレークポイントが起動時にヒットしましたが、「実行」メソッドを呼び出すとブレッドクラムが表示されません。
私の DynamicNodeProvider は次のようになります。
public class ProfileDynamicNodeProvider
: DynamicNodeProviderBase
{
public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
{
ProfileDao dao = DependencyResolver.Current.GetService<ProfileDao>();
// Create a node for each element
foreach (Profile profile in dao.GetAll())
{
DynamicNode dynamicNode = new DynamicNode
{
Title = profile.Name,
//Key = "Profile_"+profile.IdProfile,
ParentKey = "KeyOfParentNode",
};
dynamicNode.RouteValues.Add("id", profile.IdProfile);
yield return dynamicNode;
}
}
}
この作業を行うにはどうすればよいですか?
編集: 間違った順序で処理されている可能性がありますか? CustomSiteMapNodeProvider のブレークポイントに到達する前に、DynamicNodeProvider のブレークポイントに到達します。