我的MvcSiteMap地图主要由实体文件,XML配置文件,C#调用文件组成,当然为了前台调用方法,可以为HtmlHelper添加一个扩展方法

第一步 定义站点地图实体

 public class MvcSiteMap
{
[XmlAttribute]
public int ID { get; set; }
[XmlAttribute]
public string Title { get; set; }
[XmlAttribute]
public string Url { get; set; }
[XmlAttribute]
public int ParnetID { get; set; }
public MvcSiteMap Parent { get; set; }
}
public class MvcSiteMapList
{
public List<MvcSiteMap> MvcSiteMaps { get; set; }
}

第二步 做个示例的xml

<?xml version="1.0" encoding="utf-8" ?>
<MvcSiteMapList>
<MvcSiteMaps>
<MvcSiteMap Title = "根" Url = "#" ID = "" ParnetID = ""></MvcSiteMap>
<MvcSiteMap Title = "测试网站" Url = "#" ID = "" ParnetID = ""></MvcSiteMap>
<MvcSiteMap Title = "首页123sadfasdfds" Url = "/" ID = "" ParnetID = ""></MvcSiteMap>
</MvcSiteMaps>
</MvcSiteMapList>

第三步:地图核心代码

 public class MvcSiteMapFactory
{
private static List<MvcSiteMap> siteMapList
{
get
{
if (string.IsNullOrWhiteSpace(SiteMapString))
throw new ArgumentException("请为在web.config中配置SiteMapString节点,以支持网站地图功能"); return ConfigCache.ConfigFactory.Instance.GetConfig<MvcSiteMapList>(System.Web.HttpContext.Current.Server.MapPath(SiteMapString)).MvcSiteMaps;
}
} private static string SiteMapString = System.Configuration.ConfigurationManager.AppSettings["SiteMapString"] ?? string.Empty; /// <summary>
/// 生成站点地图
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static MvcHtmlString GeneratorSiteMap(string url)
{
StringBuilder str = new StringBuilder();
List<string> pathList = new List<string>();
MvcSiteMap current = GetSiteMap(url);
GetFather(current, pathList);
pathList.Reverse();
pathList.ForEach(i =>
{
str.AppendFormat("<span style='padding:0 5px;'>{0}</span>>", i);
}); string result = str.ToString();
if (!string.IsNullOrWhiteSpace(result))
result = result.Remove(str.ToString().Length - ); return MvcHtmlString.Create(result);
} static MvcSiteMap GetSiteMap(string url)
{
return siteMapList.FirstOrDefault(i => i.Url == url);
}
/// <summary>
/// 递归找老祖宗
/// </summary>
/// <param name="father"></param>
static void GetFather(MvcSiteMap father, List<string> pathList)
{
if (father != null)
{
pathList.Add(string.Format("<a href={0}>{1}</a>", father.Url, father.Title));
father.Parent = siteMapList.FirstOrDefault(i => i.ID == father.ParnetID);
GetFather(father.Parent, pathList);
}
}
}

第四步:做个扩展

 /// <summary>
/// 站点地图扩展
/// </summary>
public static class MvcSiteMapExtensions
{
public static MvcHtmlString GeneratorSiteMap(this HtmlHelper html, string url)
{
return MvcSiteMapFactory.GeneratorSiteMap(url);
}
}

第五步:前台调用

<div class="sitemap">
@Html.GeneratorSiteMap(Request.Url.AbsolutePath)
</div>

最新文章

  1. jQuery Datepicker日期控件
  2. 使用valgrind检查内存
  3. Java三大框架的配置
  4. SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具 DB2DB v1.3
  5. JavaScript的几种继承方式
  6. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流
  7. Java——再看IO
  8. linux下打开chm文件的方法
  9. Ubuntu10.4 install jdk1.6
  10. JavaScript之怎样获取元素节点
  11. RESTEasy:@FormParam、@PathParam、@QueryParam、@HeaderParam、@CookieParam、@MatrixParam说明
  12. 使用Redis作为分布式锁的一些注意点
  13. UnrealEd3视图导航及常用快捷键
  14. html5-attr和prop
  15. i386 x86_64 armv7 arm64
  16. python中的print函数
  17. ASP.NET应用技巧:非托管COM组件的使用
  18. 高通QMI协议
  19. Redux其实很简单(原理篇)
  20. javaweb servlet jsp简单笔记

热门文章

  1. 转载--C++ STL
  2. WCF入门到精通(二)——契约
  3. 集成电路中的assert和deassert应该如何翻译?
  4. 简述configure、pkg-config、pkg_config_path三者的关系
  5. 问题-[delphi2007、2010]无法二次启动,报EditorLineEnds.ttr被占用,进程一直有bds.exe?
  6. linuxmint获取root
  7. WEB API 用MemoryStream流做下载功能
  8. C#使用参数数组
  9. java 实现视频转换通用工具类:获取视频元数据信息(一)
  10. Unix/Linux环境C编程新手教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建