回到目录
原来早在webform控件时代就有了SiteMap这个东西,而进行MVC时代后,我们也希望有这样一个东西,它为我们提供了不少方便,如很方便的实现页面导航的内容修改,页面导航的样式换肤等.
我的MvcSiteMap主要由实体文件,XML配置文件,C#调用文件组成,当然为了前台使用方便,可以为HtmlHelper添加一个扩展方法.
/// <summary> /// mvc站点地图(面包屑) /// </summary> 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 : IConfiger { public List<MvcSiteMap> MvcSiteMaps { get; set; } }
<?xml version="1.0" encoding="utf-8"?> <MvcSiteMapList> <MvcSiteMaps> <MvcSiteMap Title = "根" Url = "#" ID = "1" ParnetID = "0"></MvcSiteMap> <MvcSiteMap Title = "测试网站" Url = "#" ID = "2" ParnetID = "1"></MvcSiteMap> <MvcSiteMap Title = "首页123sadfasdfds" Url = "/" ID = "3" ParnetID = "2"></MvcSiteMap> </MvcSiteMaps> </MvcSiteMapList>
/// <summary> /// 站点地图工厂 /// </summary> 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 - 1); 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>
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" alt="" />
回到目录