利用SiteMapPath控件做论坛导航

利用SiteMapPath控件做论坛导航(也适合其它系统)

首先,论坛非常简单,就三个网页,全部用的一个模板做成。

第一个网页(default.aspx):用于显示论坛的类别,点击相应的类别,将categoryid传到下一页。

第二个网页(list.aspx):用于显示某类别下面的文章列表。利用参数categoryid进行区分。如list.aspx?categoryid=1表示第一大类,list.aspx?categoryid=2表示第二大类。点击相应文章之后,将文章编号(tid)传到下一个网页。

第三个网页(content.aspx):用于显示文章内容和回复内容。根据参数tid区别不同的文章。如content.aspx?tid=1

在第二个网页和第三个网页里都用到了参数,因此用SiteMapPath控件做导航是有点难度的,但我们可以动态修改当前结点和父结点的url来实现。

第一步:编写web.sitemap

<? xml version="1.0" encoding="utf-8" ?>
< siteMap xmlns ="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
< siteMapNode url ="default.aspx" title ="主页" description ="网站首页" >
< siteMapNode url ="list.aspx?categoryid=1" title ="asp.net" description ="网站开发" >
< siteMapNode url ="content.aspx" title ="文章正文" />
</ siteMapNode >
< siteMapNode url ="list.aspx?categoryid=2" title ="powerbuilder" description ="信息系统开发" >
< siteMapNode url ="" title ="文章正文" />
</ siteMapNode >
< siteMapNode url ="list.aspx?categoryid=3" title ="english" description ="英语学习" >
< siteMapNode url ="" title ="文章正文" />
</ siteMapNode >
</ siteMapNode >
</ siteMap >

这里,我的论坛里只有三个大类:asp.net,powerbuilder和English.第二级导航因为类别少,因此完全可以在这里面写出来。但第三级导航,文章千千万万,不可能全部写出来。因此,我只需要写一次url="content.aspx"就行了,其它的全空着,目的就是要把第三级导航在网页上显示出来。

第二步:修改模板,插入SiteMapPath控件,修改它的RenderCurrentNodeAsLink="True" ,注意这点非常重要。

第三步:修改content.aspx页。其它两个网页SiteMapPath控件能正常显示,因此没有必要修改。

首先,在Page_Load里面注册事件

protected void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
bind();
// 注册SiteMap事件
SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
}

接着,编写事件代码:

private SiteMapNode SiteMap_SiteMapResolve( object sender, SiteMapResolveEventArgs e)
{
// 克隆当前结点和父结点
SiteMapNode currentNode = SiteMap.CurrentNode.Clone( true );
// 获取文章编写
int tid = Convert.ToInt32(Request.QueryString[ " tid " ]);
if ( 0 != tid)
{
// 修改当前结点的url
currentNode.Url = currentNode.Url + " ?tid= " + tid.ToString();
// GetcId(tid)是一个自己编写的方法,通过文章编号返回类别编号
int categoryid = GetId(tid);
// 修改父结点的url  
currentNode.ParentNode.Url = " list.aspx?categoryid= " + categoryid.ToString();
// 修改父结点的title, GetName(categoryid)也是自己编写的一个方法,通过类别编号获取类别名称
currentNode.ParentNode.Title = GetName(categoryid);
}
return currentNode;
}

注意,一定要修改父结点的url和title,不然你的SiteMapPath控件,显示就会不对。

最后,为了不影响别的网页,在Page_Unload里注销事件:

protected void Page_Unload( object sender, EventArgs e)
{
SiteMap.SiteMapResolve
-= new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
}

到此,导航就完成了。不管url如何变化,我们都可以动态修改它,为我们服务。

转载于:https://www.cnblogs.com/death029/archive/2011/08/04/2127122.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值