揭开站点导航的面纱(二)动态修改内存中的站点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(),是用来获取参数的两个方法,实际中根据实际情况而定。

运行,我们看看这个链接的属性:

揭开站点导航的面纱(二)动态修改内存中的站点map


此,我们就很简单的实现了动态修改内存中的站点地图了!

站点导航,是我们在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哈哈