如何从 web.sitemap 中定义的 asp:MENU 控件中删除 SiteMapNode
我在 web.sitemap 中定义了导航,并且我想以编程方式禁用某些 siteMapNode。怎么可能呢?
例如我有下一个节点: 我想禁用节点,如果它有 Roles="Admin"
roleManager 设置为
并且 Windows 授权没有“Admin”团体。它就像虚拟的一样。
我接下来尝试:
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 中删除节点?,但我的数据源具有 SiteMapDataSource 类型,而不是 Repeater.DataSource
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
接下来我意识到:
我创建了新的提供程序
,并在 web.config 中进行了提供程序注册:
I realized it next:
I created new provider like
and did Provider registration in web.config: