首页 / 软件开发 / .NET编程技术 / 体验.net2.0的优雅(3) 为您的SiteMap添加、控制转发功能
体验.net2.0的优雅(3) 为您的SiteMap添加、控制转发功能2011-02-06 博客园 quitgame首先看一下一个标准的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;
/**//// <summary>
/// The helper class for sitemap
/// </summary>
public static class MySiteMap
{
static NameValueCollection siteMapCol;
static MySiteMap()
{
SiteMapNodeCollection smc = SiteMap.RootNode.GetAllNodes();
siteMapCol = new NameValueCollection();
IEnumerator ie = smc.GetEnumerator();
while (ie.MoveNext())
{
siteMapCol[((SiteMapNode)ie.Current).Title] = ((SiteMapNode)ie.Current).Url;
}
}
/**//// <summary>
/// get url for title
/// </summary>
/// <param name="key">title</param>
/// <returns>url string for the title</returns>
public static string FindForward(string key)
{
return siteMapCol[key];
}
/**//// <summary>
/// get url for title
/// </summary>
/// <param name="key">title</param>
/// <param name="paramsFormat">parameters format</param>
/// <param name="paramsValue">parameters value</param>
/// <returns>url string for the title</returns>
public static string FindForward(string key,string paramsFormat,params object[] paramsValue )
{
return String.Format(FindForward(key) + "?" + paramsFormat, paramsValue);
}
public static void Forward(string key)
{
HttpContext.Current.Response.Redirect(FindForward(key));
}
public static void Forward(string key, string paramsFormat, params object[] paramsValue)
{
HttpContext.Current.Response.Redirect(FindForward(key,paramsFormat,paramsValue));
}
public static void Tranfer(string key)
{
HttpContext.Current.Server.Transfer(FindForward(key));
}
public static void Tranfer(string key, string paramsFormat, params object[] paramsValue)
{
HttpContext.Current.Server.Transfer(FindForward(key, paramsFormat, paramsValue));
}
}