2009-04-22 4 views

답변

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); 
} 
0

어떤 기준을 기반으로합니까? 특정 단일 노드 만 숨기려면 TreeView의 NodeDataBound 이벤트에 가입하고 전체 항목 (노드)을 Visible = false로 설정하십시오.

더 나은 방법으로 이것을 수행하고 더 많은 유연성을 제공해야하는 경우 고유 한 SiteMapProvider를 구현하는 것이 좋습니다. 그런 다음 각 사이트 맵 노드에 대해 ShowInNavigation 속성을 가질 수 있으며 사이트 맵을 만들 때 설정할 수 있습니다.

+0

기본적으로 세 가지 메뉴 항목을 표시하고 싶습니다. 사용자 크레아 사용자 사이트 맵에는 '사용자 편집'을 포함하고 싶지만 TreeView에는 포함시키지 않습니다. – ntombela

+0

나는 아직도 당신이 원하는 것을 이해하지 못합니다. – Slavo