我有一个包含所有节点的SiteMap。我正在使用一个TreeView控件,该控件链接到SiteMap进行导航。现在我想隐藏某些节点出现在TreeView上。有可能这样做吗?
答案 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,并且可以在构建站点地图时设置该属性。