0

我有一个包含所有节点的站点地图。我正在使用链接到 SiteMap 进行导航的 TreeView 控件。现在我想隐藏某些节点不出现在 TreeView 上。是否有可能做到这一点?

4

2 回答 2

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);
}
于 2009-04-22T11:20:52.153 回答
0

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

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

于 2009-04-22T11:00:46.650 回答