体验.net2.0的优雅(3) -- 为您的 SiteMap 添加 控制转发功能
2005-11-24 20:42
495 查看
首先看一下一个标准的SiteMap文件(Visual Web Developer 自带)
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<siteMapNode title="Home" url="Default.aspx" description="This is my homepage" >
<siteMapNode title="Resume" url="Resume.aspx" />
<siteMapNode title="Links" url="Links.aspx" />
<siteMapNode title="Albums" url="Albums.aspx" >
<siteMapNode title="Photos" url="Photos.aspx" >
<siteMapNode title="Details" url="Details.aspx" />
</siteMapNode>
</siteMapNode>
<siteMapNode title="Register" url="Register.aspx" />
<siteMapNode title="Manage" url="Admin/Albums.aspx" roles="Administrators">
<siteMapNode title="Photos" url="Admin/Photos.aspx" >
<siteMapNode title="Details" url="Admin/Details.aspx" />
</siteMapNode>
</siteMapNode>
</siteMapNode>
</siteMap>
在ASP.net 页面中可以利用这个SiteMap 文件和 menu 控件配合生成网站目录,也可以用来和SiteMapPath 控件配合生成 “您现在的位置”。但是遗憾的是缺没有一个简单的办法利用此文件来进行控制转发。在 Struts Framework 里面,控制转发却是一个非常重要的功能,被人大肆的吹嘘---优雅。不过你不用急,在ASP.net里面,我们可以用几行代码完成这个操作。
using System;
using System.Web;
using System.Collections.Specialized;
using System.Collections;
public static class MySiteMap
以上是 FindForward, Forward , Transfer 三个方法的共六个重载,其中3个是可以给URL加参数的
FindForward : 可以根据 SiteMap 中的 title 找到对应的 URL
Forward :直接转发到 SiteMap 中 相应 title 对应的 URL 上去
Transfer :跟 Forward 功能,但是是在服务器端转发(保留了Context),也就是说浏览器看到的地址不变
实现原理很简单,我们在静态构造函数里面使用 SiteMap 提供的API把 SiteMap 读取出来存储到了一个集合里面,在需要的时候我们从集合众查找 URL ,仅此而已。
把以上代码存为 cs 文件,放在 App_Code里面,就可以安全放心的使用了 。
以下是使用实例:
Response.Write(MySiteMap.FindForward("Details"));
MySiteMap.Forward("Details", "AlbumID={0}&Page={1}", 1, 4);
打印的结果:
/MyWebSite/Details.aspx?AlbumID=1&Page=4
不过尽管如此,还是有一个小小的遗憾,因为 vs 2005 为资源文件和配置文件都提供了生成强类型访问的机制,却没有为SiteMap 提供类似的机制,也就是说如果 title 书写错误的话,仍然只能得到运行时检查。
其他文章:
体验.net 2.0 的优雅(1) -- 异步WebService调用
体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<siteMapNode title="Home" url="Default.aspx" description="This is my homepage" >
<siteMapNode title="Resume" url="Resume.aspx" />
<siteMapNode title="Links" url="Links.aspx" />
<siteMapNode title="Albums" url="Albums.aspx" >
<siteMapNode title="Photos" url="Photos.aspx" >
<siteMapNode title="Details" url="Details.aspx" />
</siteMapNode>
</siteMapNode>
<siteMapNode title="Register" url="Register.aspx" />
<siteMapNode title="Manage" url="Admin/Albums.aspx" roles="Administrators">
<siteMapNode title="Photos" url="Admin/Photos.aspx" >
<siteMapNode title="Details" url="Admin/Details.aspx" />
</siteMapNode>
</siteMapNode>
</siteMapNode>
</siteMap>
在ASP.net 页面中可以利用这个SiteMap 文件和 menu 控件配合生成网站目录,也可以用来和SiteMapPath 控件配合生成 “您现在的位置”。但是遗憾的是缺没有一个简单的办法利用此文件来进行控制转发。在 Struts Framework 里面,控制转发却是一个非常重要的功能,被人大肆的吹嘘---优雅。不过你不用急,在ASP.net里面,我们可以用几行代码完成这个操作。
using System;
using System.Web;
using System.Collections.Specialized;
using System.Collections;
public static class MySiteMap
以上是 FindForward, Forward , Transfer 三个方法的共六个重载,其中3个是可以给URL加参数的
FindForward : 可以根据 SiteMap 中的 title 找到对应的 URL
Forward :直接转发到 SiteMap 中 相应 title 对应的 URL 上去
Transfer :跟 Forward 功能,但是是在服务器端转发(保留了Context),也就是说浏览器看到的地址不变
实现原理很简单,我们在静态构造函数里面使用 SiteMap 提供的API把 SiteMap 读取出来存储到了一个集合里面,在需要的时候我们从集合众查找 URL ,仅此而已。
把以上代码存为 cs 文件,放在 App_Code里面,就可以安全放心的使用了 。
以下是使用实例:
Response.Write(MySiteMap.FindForward("Details"));
MySiteMap.Forward("Details", "AlbumID={0}&Page={1}", 1, 4);
打印的结果:
/MyWebSite/Details.aspx?AlbumID=1&Page=4
不过尽管如此,还是有一个小小的遗憾,因为 vs 2005 为资源文件和配置文件都提供了生成强类型访问的机制,却没有为SiteMap 提供类似的机制,也就是说如果 title 书写错误的话,仍然只能得到运行时检查。
其他文章:
体验.net 2.0 的优雅(1) -- 异步WebService调用
体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤
相关文章推荐
- 体验.net2.0的优雅(4):Provider、策略、控制反转和依赖注入
- 利用静态内部类为您的代码添加辅助功能
- 体验.NET2.0的优雅之Provider应用
- GEF -- 改善用户体验,为图形元素添加创建助手工具条,取代palette的功能
- [libgdx游戏开发教程]使用Libgdx进行游戏开发(3)-给游戏添加一些控制功能
- 在windows sever 2008系统中如何添加桌面体验功能
- 添加伪静态功能后,acl权限控制失效问题
- 添加ASP.NET文件上传功能为您的网站
- 为您的Android,iOS等应用添加声波传输功能
- 体验.NET2.0的优雅之Provider应用
- 为您的WordPress 添加语音搜索功能 备忘
- DedeCMS添加Sitemap自动生成+百度ping推送功能
- 喜讯:SOAOffice2010添加并发控制功能
- 为您的设备添加社交网络功能
- DedeCMS添加Sitemap自动生成+百度ping推送功能
- 为您的Android,iOS等应用添加声波传输功能
- 功能节点通过添加参数对相应功能进行控制
- DedeCMS添加Sitemap自动生成+百度ping推送功能
- 添加伪静态功能后,acl权限控制失效问题
- 为您的Android,iOS等应用添加声波传输功能