Скрытие узлов ASP.NET SiteMap в элементе управления TreeView - PullRequest
0 голосов
/ 22 апреля 2009

У меня есть SiteMap со всеми моими узлами. Я использую элемент управления TreeView, который связан с SiteMap для навигации. Теперь я хотел бы скрыть определенные узлы от появления в TreeView. Возможно ли это сделать?

Ответы [ 2 ]

6 голосов
/ 22 апреля 2009

Да, это определенно возможно. То, как мы это делаем, - это добавление пользовательского атрибута «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);
}
0 голосов
/ 22 апреля 2009

На основании каких критериев? Если вы хотите скрыть только отдельные узлы, подпишитесь на событие NodeDataBound TreeView и установите для всего элемента (узла) значение Visible = false.

Если вам нужно сделать это лучше и обеспечить большую гибкость, я бы посоветовал вам реализовать свой собственный SiteMapProvider. Тогда у вас может быть свойство ShowInNavigation для каждого узла карты сайта, и вы сможете установить его при создании карты сайта.

...