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

发布于 2024-07-17 10:34:28 字数 104 浏览 6 评论 0原文

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

I have a SiteMap with All my nodes. I'm using a TreeView control which is linked to the SiteMap for navigation. Now I would like to hide certain nodes from appearing on the TreeView. Is it possible to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千里故人稀 2024-07-24 10:34:28

是的,这绝对有可能。 我们这样做的方法是将自定义“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);
}

Yes, it's definitely possible. The way we do it is to add a custom "IsPhantom" attribute to the nodes we don't want shown in the sitemap (and in various other places too):

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

Then in the sitemap control, use the following code to remove nodes that have the "IsPhantom" attribute:

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);
}
捎一片雪花 2024-07-24 10:34:28

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

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

Based on what criteria? If you only want to hide specific single nodes, subscribe to the NodeDataBound event of the TreeView and set the whole item (node) to Visible=false.

If you need to do this in a better way and provide more flexibility, I would advise that you implement your own SiteMapProvider. Then you can have a property ShowInNavigation for each sitemap node, and would be able to set that when constructing your sitemap.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文