随笔 - 142  文章 - 2  评论 - 4  阅读 - 57303

控件(四)——TreeView控件以SiteMapdataSource控件为数据源实现最简单的站点地图

站点地图的应用还是比较普遍的。哪怕一个简单的个人主页,也会有站点地图。今天我们做一个小例子,作用只是抛砖引玉。

首先,添加一个Web.sitemap,注意我们这里不改变该文件的名字。添加如下代码:

 

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="a.aspx" title="首页"  description="点此返回首页">
  <siteMapNode url="b.aspx" title="根目录B页"  description="点此返回首页" />
  <siteMapNode url="kongjian1.aspx" title="概念页"  description="" />

  <siteMapNode url="" title ="第一个子目录" description ="">
    <siteMapNode url="~/one/a.aspx" title="第一个子目录A页" description ="" />
    <siteMapNode url="~/one/b.aspx" title ="第一个子目录B页" description ="" />
  </siteMapNode>

  <siteMapNode url="" title ="one目录的子目录" description ="">
    <siteMapNode url="~/one/cone/a.aspx" title ="one目录的子目录a" description ="" />
    <siteMapNode url="~one/cone/b.aspx" title="one目录的子目录b" description ="" />
  </siteMapNode>

  <siteMapNode url="" title="TWO目录" descripition="这里是介绍">
    <siteMapNode url="~/two/a.aspx" title="TWO目录的子目录a" descripition="这里是介绍"/>
    <siteMapNode url="~/two/b.aspx" title="TWO目录的子目录b" descripition="" />
  </siteMapNode>

  <!--<siteMapNode siteMapFile ="~/mysm.sitemap" />-->
  <!--<siteMapNode provider="sqlsitemap" />-->
  <siteMapNode url="sitemap.aspx" title="动态修改内容中" description ="动态修改内存中的站点地图" />
</siteMapNode>

  
</siteMap>


然后我们在default.aspx页添加一个TreeView控件,配置它的数据源为站点地图。就会如下图显示:

 

前台代码:

 

        protected void Page_Load(object sender, EventArgs e)
        {
            //首先这里注册一个事件,也就是说在访问CurrentNode属性的时候触发这个事件(委托)
            SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);

        }

        SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
        {//我们自定义的处理方法
            SiteMapNode CurrentNode = SiteMap.CurrentNode.Clone(true);
            //上面这句,获取并创建当前节点的副本,并同时复制他的上级节点
            
            SiteMapNode TempNode = CurrentNode;

            int id = nid();
            int page = npage();

            //从下面方法中得到变量
            if (id > 0)
            {
                TempNode.Url = TempNode.Url + "?id=" + id.ToString();
            }
            if (id > 0 && page >= 0)
            {
                TempNode.Url = TempNode.Url + "?id=" + id.ToString();
            }
            else if (page >= 0)
            {
                TempNode.Url = TempNode.Url + "?page" + page.ToString();
            }
            return TempNode;
        }

        private int nid()
        {//随便设置的数
            return 12;
        }
        private int npage()
        {
            return 3;
        }
    }


显示效果:

 

我们只需要点击相应连接,就会返回相应页面。

posted on   刘正权的博客  阅读(492)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2012年5月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示