博客园  :: 首页  :: 联系 :: 管理

动态修改SiteMapPath - 代码生成所有节点 实例

Posted on 2008-10-09 09:08  sunrack  阅读(1176)  评论(0编辑  收藏  举报
 protected void Page_Load(object sender, EventArgs e)
        {
            SiteMap.SiteMapResolve 
+= new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);

            
this.LoadData();
        }

 

 

 

 private SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
        {
            SiteMapNode currentNode 
= SiteMap.CurrentNode.Clone(true);
            
            Category curCategory 
= (Category)e.Context.Session["Category"];

            Article curArticle 
= (Article)e.Context.Session["Article"];

            NavigatorState curNavigatorState 
= NavigatorState.First;

            
string curPageName = e.Context.Request.AppRelativeCurrentExecutionFilePath.Substring(2).ToUpper();

            
switch (curPageName)
            {
                
case "INDEX.ASPX":
                    {
                        curNavigatorState 
= NavigatorState.First;
                        
break;
                    }
                
case "CATEGORYLIST.ASPX":
                    {
                        curNavigatorState 
= NavigatorState.Category;

                        currentNode 
= CreateNodes(currentNode, curCategory);
                      
                        
break;
                    }
                
case "ARTICLEVIEW.ASPX":
                    {
                        curNavigatorState 
= NavigatorState.Article;

                        currentNode 
= CreateNodes(currentNode, curCategory);

                        currentNode 
= CreateChildNode(currentNode, 
                                    curArticle.ArticleID.ToString(),
                                    
"ArticleView.aspx?ArticleID=" + curArticle.ArticleID,
                                    
"全文");

                        
break;
                    }
                    
default:
                    {
                        curNavigatorState 
= NavigatorState.First;
                        
break;
                    }
            }

            
return currentNode;
        }

 

 

 

 private SiteMapNode CreateNodes(SiteMapNode currentNode,  Category curCategory)
        {
            
if (curCategory != null)
            {
                List
<Category> curCategoryTree = CategoryData.GetCategoryTree(curCategory.CategoryID);

                SiteMapNode curRootNode 
= SiteMap.CurrentNode.Clone(true);

                
foreach (Category category in curCategoryTree)
                {
                    curRootNode 
= CreateChildNode(curRootNode,
                                    category.CategoryID.ToString(),
                                    
"CategoryList.aspx?CategoryID=" + category.CategoryID,
                                    category.CategoryName);

                    currentNode 
= curRootNode;
                }
            }
            
return currentNode;
        }

 

 

 

 SiteMapNode CreateChildNode(SiteMapNode rootNode, string key, string url, string title)
        {
            SiteMapNodeCollection childNodes 
= new SiteMapNodeCollection();

            SiteMapNode newNode 
= new SiteMapNode(SiteMap.Provider, key, url, title);
                                  
            newNode.ParentNode 
= rootNode;

            childNodes.Add(newNode);

            rootNode.ChildNodes 
= childNodes;

            
return newNode;
        }