利用SiteMapPath控件做论坛导航(也适合其它系统)
2011-04-06 00:35
260 查看
首先,论坛非常简单,就三个网页,全部用的一个模板做成。
第一个网页(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
这里,我的论坛里只有三个大类:asp.net,powerbuilder和English.第二级导航因为类别少,因此完全可以在这里面写出来。但第三级导航,文章千千万万,不可能全部写出来。因此,我只需要写一次url="content.aspx"就行了,其它的全空着,目的就是要把第三级导航在网页上显示出来。
第二步:修改模板,插入SiteMapPath控件,修改它的RenderCurrentNodeAsLink="True" ,注意这点非常重要。
第三步:修改content.aspx页。其它两个网页SiteMapPath控件能正常显示,因此没有必要修改。
首先,在Page_Load里面注册事件
接着,编写事件代码:
注意,一定要修改父结点的url和title,不然你的SiteMapPath控件,显示就会不对。
最后,为了不影响别的网页,在Page_Unload里注销事件:
到此,导航就完成了。不管url如何变化,我们都可以动态修改它,为我们服务。
第一个网页(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如何变化,我们都可以动态修改它,为我们服务。
相关文章推荐
- 利用SiteMapPath控件做论坛导航
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- C/S模式开发中如何利用WebBrowser控件制作导航窗体
- 利用RFID保护系统固件和其它知识产权(询问相应鉴别)
- android自定义滑动开关控件,适合所有的android系统
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- asp.net高级应用之站点导航SiteMapPath控件
- asp.net 2.0导航控件 menu,SiteMapPath使用
- android自定义滑动开关控件,适合所有的android系统
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八