Remove a sitemapnode
本文关键字:sitemapnode Remove | 更新日期: 2023-09-27 18:13:15
我正在尝试设置基于角色/用户的站点地图。(我不能使用安全修剪,因为角色成员提供程序,我有它在服务器端,这将是复杂的实现),所以我要做的是简单地在获得项目删除后做它。
我有一个网站地图定义为:
<siteMapNode title="Gestion des roles" url="" description="Gestion des roles">
<siteMapNode url="~/Membership/AddRole.aspx" title="Ajouter Role" description="Ajouter role" />
<siteMapNode url="~/Membership/DeleteRole.aspx" title="Supprimer Role" description="Supprimer un role" />
</siteMapNode>
<siteMapNode title="Gestion des sites" url="" description="Gestion des sites">
<siteMapNode url="~/Membership/AddSite.aspx" title="Ajouter Site" description="Ajouter un nouveau site" />
</siteMapNode>
我现在访问的方式是这样的代码:
Menu menu = (Menu)Master.FindControl("Menu1");
String valuePath = @"Gestions/Gestion/Ajouter";
MenuItem item = menu.FindItem(valuePath);
if (item.Parent != null)
item.Parent.ChildItems.Remove(item);
但在执行后为空并抛出异常。感谢您的阅读
您可以使用下面的递归函数找到基于Url的菜单项-
private MenuItem FindItem(MenuItemCollection collection, string url)
{
foreach (MenuItem item in collection)
{
if (item.NavigateUrl.Equals(url,
StringComparison.InvariantCultureIgnoreCase))
return item;
if (item.ChildItems.Count > 0)
return FindItem(item.ChildItems, url);
}
return null;
}
protected void Page_Load(object sender, EventArgs e)
{
var menu = (Menu)Master.FindControl("NavigationMenu");
// string valuePath = @"Gestions/Gestion/Ajouter";
string valuePath = @"~/About/About2.aspx";
var item = FindItem(menu.Items, valuePath);
if(item != null)
{
if (item.Parent != null)
item.Parent.ChildItems.Remove(item);
else
menu.Items.Remove(item);
}
}
如果由于数据绑定问题而遇到在MENU中查找项的问题,可以使用ASP。. NET preendercomplete :
protected void Page_PreRenderComplete(object sender, EventArgs e){}