您的位置:首页 > 其它

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

2012-07-18 17:27 302 查看
在上一篇博文中我们通过一个简单的例子了解了站点导航的内容。

这一篇博文,我们来看一下动态修改内存中的站点地图,那么到底是什么意思呢?

在日常浏览中,我们常常会发现类似于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开发中非常常用的,所以我们还是很有必要深刻掌握的,接下来还会发相关的文章,与大家一讨论学习!

转载请说明出处!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: