web.sitemap で定義されたナビゲーションがあり、プログラムで siteMapNode を無効にしたい。それはどのように可能ですか?
たとえば、次のノードがあります。また、ロールが「管理者」の場合はノードを無効にします
roleManager は同様に設定され<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
、Windows Authorization には「Admin」グループがありません。それはVirtual oneのようなものです。
私は次に試しました:
SiteMapNodeCollection tempCollection = new SiteMapNodeCollection(SiteMap.RootNode.ChildNodes);
if (SiteMap.RootNode.ReadOnly)
SiteMap.RootNode.ReadOnly = false;
foreach (SiteMapNode node in tempCollection)
{
if (node.Roles.Contains("Admin"))
{
SiteMap.RootNode.ChildNodes.Remove(node);
}
}
それから私は得ています: System.NotSupportedException: コレクションは読み取り専用です。
それからのように試しました
SiteMapNodeCollection modifiableCollection = new SiteMapNodeCollection(SiteMap.RootNode.ChildNodes);
foreach (SiteMapNode node in SiteMap.RootNode.ChildNodes)
{
if (node.Roles.Contains("Admin"))
{
modifiableCollection.Remove(node);
}
}
しかし、その後、その新しいコレクションをナビゲーション (Menu1 オブジェクト) にプラグインする方法がわかりません
また、次のように、すべてのノードスローハンドラーを処理しようとしました
SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.SiteMapAccess);
private SiteMapNode SiteMapAccess(Object sender, SiteMapResolveEventArgs e)
{
SiteMapNode RootNode = SiteMap.RootNode.Clone(true);
SiteMapNode tempNode = RootNode;
if (tempNode.Roles.Contains("Admin"))
{
tempNode.RootNode.ChildNodes.Remove(tempNode);
}
return RootNode;
}
しかし、「new」ステートメントを使用する前に RootNode オブジェクトを作成する必要があることをスローしています。次のガイドを使用しましたが: http://msdn.microsoft.com/en-us/library/ms178425.aspx
助言がありますか?http://forums.asp.net/t/894192.aspxここで、オプションを試していない興味深い議論を見つけましたe.Item.Parent.ChildItems.Remove(e.Item)
これも興味深い例です。SiteMapNodeCollection からノードを削除するにはどうすればよいですか? 、しかし、私のデータソースには Repeater.DataSource ではなく SiteMapDataSource タイプがあります