爱上MVC3系列~开发一个站点地图(俗称面包屑)

爱上MVC3系列~开发一个站点地图(俗称面包屑)

回到目录

原来早在webform控件时代就有了SiteMap这个东西,而进行MVC时代后,我们也希望有这样一个东西,它为我们提供了不少方便,如很方便的实现页面导航的内容修改,页面导航的样式换肤等.

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

实体部分

复制代码
    /// 
    /// mvc站点地图(面包屑)
    /// 
    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 MvcSiteMaps { get; set; }
    }
复制代码

XML部分代码

复制代码
"1.0" encoding="utf-8"?>

  
    ""  Url = "#" ID = "1" ParnetID = "0">
    "测试网站"  Url = "#" ID = "2" ParnetID = "1">
    "首页123sadfasdfds"  Url = "/" ID = "3" ParnetID = "2">
  
复制代码

C#核心代码

复制代码
    /// 
    /// 站点地图工厂
    /// 
    public class MvcSiteMapFactory
    {
        private static List siteMapList
        {
            get
            {
                if (string.IsNullOrWhiteSpace(SiteMapString))
                    throw new ArgumentException("请为在web.config中配置SiteMapString节点,以支持网站地图功能");

                return ConfigCache.ConfigFactory.Instance.GetConfig(System.Web.HttpContext.Current.Server.MapPath(SiteMapString)).MvcSiteMaps;
            }
        }

        private static string SiteMapString = System.Configuration.ConfigurationManager.AppSettings["SiteMapString"] ?? string.Empty;

        /// 
        /// 生成站点地图
        /// 
        /// 
        /// 
        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("{0}>", 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);
        }
        /// 
        /// 递归找老祖宗
        /// 
        /// 
        static void GetFather(MvcSiteMap father, List<string> pathList)
        {


            if (father != null)
            {
                pathList.Add(string.Format("{1}", father.Url, father.Title));
                father.Parent = siteMapList.FirstOrDefault(i => i.ID == father.ParnetID);
                GetFather(father.Parent, pathList);
            }
        }
    }
复制代码

添加一个扩展方法

复制代码
    /// 
    /// 站点地图扩展
    /// 
    public static class MvcSiteMapExtensions
    {
        public static MvcHtmlString GeneratorSiteMap(this HtmlHelper html, string url)
        {
            return MvcSiteMapFactory.GeneratorSiteMap(url);
        }
    }
复制代码

前台布局页里调用

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

运行效果如图

回到目录

分类:  .NET MVC
好文要顶  关注我  收藏该文   
张占岭
关注 - 31
粉丝 - 1660
+加关注
4
« 上一篇: 产品介绍~大叔管理系统

你可能感兴趣的:(MVC+Ef)