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

简介:

原来早在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部分代码

<?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>

C#核心代码

    /// <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>

运行效果如图

本文转自博客园张占岭(仓储大叔)的博客,原文链接:爱上MVC3系列~开发一个站点地图(俗称面包屑),如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
前端开发 数据库 Python
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
118 0
|
5月前
|
JSON 前端开发 Java
Springboot mvc开发之Rest风格及RESTful简化开发案例
Springboot mvc开发之Rest风格及RESTful简化开发案例
55 2
|
6月前
|
存储 JSON 前端开发
利用Spring MVC开发程序2
利用Spring MVC开发程序
47 1
|
6月前
|
设计模式 存储 前端开发
Java的mvc设计模式在web开发中应用
Java的mvc设计模式在web开发中应用
|
6月前
|
设计模式 JSON 前端开发
利用Spring MVC开发程序1
利用Spring MVC开发程序
55 0
|
6月前
|
存储 设计模式 前端开发
怎么根据MVC开发规则进行开发
MVC开发规则,也称为MVC设计模式,是软件工程中一种常用的架构模式,用于将应用程序划分为三个主要组成部分:模型(Model)、视图(View)和控制器(Controller)。这种架构模式有助于将应用程序的逻辑、数据和用户界面分离,使代码更加清晰、可维护,并且提高了应用程序的灵活性。
54 2
|
6月前
|
存储 前端开发 Java
理解MVC架构模式:Java Web开发的设计理念
【4月更文挑战第3天】MVC架构模式在Web开发中广泛应用于构建可维护和扩展的应用。它将应用程序分为模型、视图和控制器三部分,增强代码模块化和重用。模型处理数据逻辑,视图负责用户界面,而控制器协调二者。MVC优点包括高内聚、低耦合、易于测试、扩展和维护。在Java Web开发中,可通过Servlet、JSP或Spring框架实现MVC。理解并运用MVC是Java Web开发者的关键技能。
101 0
理解MVC架构模式:Java Web开发的设计理念
|
6月前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
6月前
|
设计模式 存储 前端开发
Java Web开发中MVC设计模式的实现与解析
Java Web开发中MVC设计模式的实现与解析
166 0
|
6月前
|
JSON 前端开发 Java
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!