揭开站点导航的面纱(二)动态修改内存中的站点map
揭开站点导航的面纱(二)动态修改内存中的站点地图
在上一篇博文中我们通过一个简单的例子了解了站点导航的内容。
这一篇博文,我们来看一下动态修改内存中的站点地图,那么到底是什么意思呢?
在日常浏览中,我们常常会发现类似于http://new.com/id=3&page=12这样的格式,遇上这样的问题,那么文章列表中通常都有多篇,我们总不能把这些都放到站点地图中去,何况文章ID、栏目编号、商品分类或者商品ID也不是我们事先能够预料到的,那么站点地图里没有,外面就不能显示,该怎么办呢?这就需要用到动态修改内存中的站点地图了。
如上面提出的问题,我们假设有一个文章管理系统结构如下:
首页-新闻-国际新闻(列表)
那么可以假设国际新闻这一级的页面是list.aspx,不同的栏目会有不同的ID,那么地址结构就假设如下:
xxx.com--~/news/--list.aspx?id=3&page=12
这样一个结构,我们对新闻列表页的处理就可以只在站点地图中静态地写上url="~/news/list.aspx"。那么如果在别人浏览时呈现出上面的结构呢,我们接下来处理。
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="1"> <siteMapNode url="b.aspx" title="根目录B页" description="2" /> <siteMapNode url="Default.aspx" title="Default页" description="3" /> <siteMapNode url="" title="one目录" description="4"> <siteMapNode url="~/one/a.aspx" title="one目录下的a" description="5"/> <siteMapNode url="~/one/b.aspx" title="one目录下的b" description="6"/> <siteMapNode url="" title="one目录下的once目录" description="7"> <siteMapNode url="~/one/once/a.aspx" title="one目录下的once目录下的a" description="8"/> <siteMapNode url="~/one/once/b.aspx" title="one目录下的once目录下的b" description="9"/> </siteMapNode> </siteMapNode> <siteMapNode url="" title="two目录" description="10"> <siteMapNode url="~/two/a.aspx" title="two目录下的a" description="11"/> <siteMapNode url="~/two/b.aspx" title="two目录下的b" description="12"/> </siteMapNode> <siteMapNode url="sitemap.aspx" title="动态修改内存中" description="动态修改内存中的站点地图"/> </siteMapNode> </siteMap>
主要就是用到title为动态修改内存中的这一句来演示。
然后在演示页面sitemap.aspx中放一个SitemapPath控件,注意设置它的renderCurrentNodeAsLink为true(指示当前结点为链接)
页面的后台代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Navigation { public partial class sitemap : System.Web.UI.Page { 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 + "&page=" + page.ToString(); } else if (page>0) { TempNode.Url = TempNode.Url + "?page=" + page.ToString(); } return TempNode; } //随便设置一个数。 private int nid() { return 3; } private int npage() { return 12; } } }
解释:上面的nid()和npage(),是用来获取参数的两个方法,实际中根据实际情况而定。
运行,我们看看这个链接的属性:
到此,我们就很简单的实现了动态修改内存中的站点地图了!
站点导航,是我们在BS开发中非常常用的,所以我们还是很有必要深刻掌握的,接下来还会发相关的文章,与大家一讨论学习!
转载请说明出处!
- 16楼liuyanlinglanq昨天 20:30
- 顶,
- 15楼lyg673770712前天 08:32
- 帅哥很帅嘛,加油。。。李亚光
- Re: yjjm1990前天 09:27
- 回复lyg673770712n呵呵……亚光,一起加油啊!
- 14楼a1314517love3天前 15:38
- 很牛很强大....,长收
- Re: yjjm19903天前 16:02
- 回复a1314517loven长收,要多光顾啊!一起加油!
- 13楼3天前 09:33
- 水平在提高中。。。。米老师
- 12楼gwblue3天前 08:06
- 好值得学习!
- 11楼happy09li3天前 00:39
- 这个确实用的很多,,期待下文
- 10楼llhhyy19893天前 21:30
- sitemap,当时表示没有用过[e06]
- 9楼wwwwenhuan3天前 20:34
- 不错
- Re: yjjm19903天前 20:45
- 回复wwwwenhuann嘿嘿!
- 8楼xhf555553天前 20:18
- 顶了
- 7楼small_baby013天前 20:05
- 呵呵,写的不错,继续加油哦!
- 6楼zs159326164534天前 19:33
- 顶了
- Re: yjjm19903天前 20:01
- 回复zs15932616453n常来啊!
- 5楼StubbornPotatoes4天前 19:32
- 推荐了。
- Re: yjjm19904天前 19:32
- 回复StubbornPotatoesn彪哥常来啊
- 4楼lilongsheng11254天前 19:32
- 写的很好哦!!
- Re: yjjm19904天前 19:32
- 回复lilongsheng1125n多谢夸奖!
- 3楼zhanglianhai5554天前 19:25
- 虽然看不懂,但我支持你!!!
- Re: a1314517love4天前 19:28
- 回复zhanglianhai555海哥,你能换句别的话不
- 2楼mazhaojuan4天前 19:24
- 飘过,高啊~~
- 1楼xqf3094天前 19:23
- [e03]
- Re: yjjm19904天前 19:23
- 回复xqf309n哈哈