すべてのノードを含むSiteMapがあります。 ナビゲーション用にSiteMapにリンクされているTreeViewコントロールを使用しています。特定のノードをTreeViewに表示しないようにします。
回答:
回答№1は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);
}
回答№2の場合は0
どのような基準に基づいて?特定の単一ノードのみを非表示にする場合は、TreeViewのNodeDataBoundイベントをサブスクライブして、アイテム全体(ノード)をVisible = falseに設定します。
もっと良い方法でこれをする必要があるならより多くの柔軟性を提供する、私はあなたがあなた自身のSiteMapProviderを実装することを勧めます。そうすれば、各サイトマップノードにShowInNavigationプロパティを設定でき、サイトマップを作成するときにそれを設定できます。