在TreeView控件中隐藏ASP.NET SiteMap节点

时间:2009-04-22 10:51:38

标签: asp.net treeview sitemap

我有一个包含所有节点的SiteMap。我正在使用一个TreeView控件,该控件链接到SiteMap进行导航。现在我想隐藏某些节点出现在TreeView上。有可能这样做吗?

2 个答案:

答案 0 :(得分:6)

是的,这绝对有可能。我们这样做的方法是将自定义的“IsPhantom”属性添加到我们不希望在站点地图中显示的节点(以及其他各种地方):

<siteMapNode url="~/Welcome.aspx" title="Welcome" description="" isPhantom="true" />

然后在站点地图控件中,使用以下代码删除具有“IsPhantom”属性的节点:

protected void Page_Load(object sender, EventArgs e)
{
    TreeView1.TreeNodeDataBound += new TreeNodeEventHandler(TreeView1_TreeNodeDataBound);              
    SiteMapSource.Provider = this.CurrentProvider;
}

protected void TreeView1_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
{
    SiteMapNode thisMapNode = (SiteMapNode)e.Node.DataItem;
    TreeNode parentTreeNode = e.Node.Parent;

    if (thisMapNode["isPhantom"] != null && thisMapNode["isPhantom"].ToLower().Equals(bool.TrueString.ToLower()) && parentTreeNode != null)
        parentTreeNode.ChildNodes.Remove(e.Node);
}

答案 1 :(得分:0)

根据什么标准?如果您只想隐藏特定的单个节点,请订阅TreeView的NodeDataBound事件,并将整个项目(节点)设置为Visible = false。

如果您需要以更好的方式执行此操作并提供更大的灵活性,我建议您实现自己的SiteMapProvider。然后,您可以为每个站点地图节点提供属性ShowInNavigation,并且可以在构建站点地图时设置该属性。