当前位置: 首页 > 编程日记 > 正文

爱上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>

运行效果如图

回到目录

相关文章:

Django web框架-----Django连接现有mysql数据库

第一步&#xff1a;win10下载mysql5.7压缩包配置安装mysql&#xff0c;创建数据库或导入数据库 第二步&#xff1a;win10搭建django2.1.7开发环境&#xff0c;创建项目为mytestsite&#xff0c;创建应用app为quicktool 第三步&#xff1a;编辑与项目同名的文件夹的配置文件&…

CUDA Samples: green ball

以下CUDA sample是分别用C和CUDA实现的生成的绿色的球图像&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第五章&#xff0c;各个文件内容如下&#xff1a;funset.cpp:#include "funset.hpp" #include <r…

ICLR 2020论文投稿2600篇,GNN、BERT、Transformer领跑热门研究方向

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;2019 年 4&#xff0c;ICLR 2020 论文征集活动开始&#xff0c;截止 9 月 25 日&#xff0c;大会共收到近 2600 篇投稿&#xff0c;相比 ICL…

android环境安装之android4.2安装(转)

准备学习android&#xff0c;着手安装android时听说很麻烦&#xff0c;在网上看了很多android安装说明&#xff0c;都是android比较早的版本&#xff0c;我这里安装了android4.2&#xff0c;简单记录一下。 安装分为几步&#xff0c;首先申明&#xff0c;安装时最好保持网络畅通…

如何创建一个百分百懂你的产品推荐系统 | 深度教程(附代码详解)

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;来源 | 读芯术&#xff08;ID&#xff1a;AI_Discovery&#xff09;你也许每天都会逛一逛电子商务网站&#xff0c;或者从博客、新闻和媒体出版物上阅读大量文章。浏览这些东西的时候&#xff0c;最令读者或者用户…

CUDA Samples: Ray Tracking

以下CUDA sample是分别用C和CUDA实现的生成光线跟踪图像&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第六章&#xff0c;CUDA各实现包括了使用常量内存和不使用常量内存两种方法&#xff0c;各个文件内容如下&#x…

从产品的适用性以及费用方面考虑

物联宇手持终端在对比性价比高低应该从产品的适用性以及费用方面考虑。不过在选择时不一定要整机&#xff0c;可以按实际需求让厂商定做和行业需要功能的手持机&#xff0c;这样有针对性的定制更能体现整体的性价效率。转载于:https://blog.51cto.com/14222294/2386642

杨学海:跨境电商新通道-进口保税直邮模式解析

为什么80%的码农都做不了架构师&#xff1f;>>> 杨学海&#xff1a;跨境电商新通道-进口保税直邮模式解析 广州威云供应链管理公司总经理杨学海在第九届中国中小企业电子商务大会上表示&#xff0c;其品牌海外通要为跨境电子商务提供一个更加快速、便捷、低成本&am…

CUDA Samples: heat conduction(模拟热传导)

以下CUDA sample是分别用C和CUDA实现的模拟热传导生成的图像&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第七章&#xff0c;各个文件内容如下&#xff1a;funset.cpp:#include "funset.hpp" #include <…

2020应届生:今年秋招也太太太太太难了吧!

讲个简短的鬼故事&#xff1a;2020秋招已经过去一大半了&#xff01;回顾9月&#xff0c;你可能以为秋招还有很多机会&#xff0c;还有大把时间准备。然而各大名企的实际进度却不等人。阿里巴巴9月12日网申截止&#xff1b;腾讯9月15日网申截止&#xff1b;宝洁9月20日关闭网申…

PDF文字怎么编辑,PDF文档编辑方法

有时候遇到PDF文件不是自己制作的或者是制作的有点匆忙&#xff0c;会有文字遗漏或者打错的时候&#xff0c;我们使用就会有点麻烦就需要把文件中的文字进行编辑修改&#xff0c;那么具体怎么做呢&#xff1f;小伙伴们都挺好奇吧&#xff0c;今天就来跟大家分享一下。操作软件&…

浏览器是怎样工作的:渲染引擎,HTML解析

2019独角兽企业重金招聘Python工程师标准>>> 渲染引擎 渲染引擎的职责是……渲染&#xff0c;也就是把请求的内容显示到浏览器屏幕上。 默认情况下渲染引擎可以显示HTML&#xff0c;XML文档以及图片。 通过插件&#xff08;浏览器扩展&#xff09;它可以显示其它类型…

CUDA Samples: Calculate Histogram(atomicAdd)

以下CUDA sample是分别用C和CUDA实现的计算一维直方图&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第九章&#xff0c;各个文件内容如下&#xff1a;funset.cpp:#include "funset.hpp" #include <rando…

glusterfs基本操作

基本操作 集群节点 扩展集群 1,必须做hosts域名解析其实通过IP地址也能做集群,但是不建议这种方式. 192.168.1.210 glusterfs04 2, 添加节点到集群中,在当前所有集群节点中都需要执行 gluster peer probe glusterfs04 3,查看对等状态 gluster peer status 查看集群节点信息 gl…

100多次竞赛后,他研发了一个几乎可以解决所有机器学习问题的框架

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;作者 | XI YANG来源 | 知乎&#xff08;机器学习之路&#xff09;一个叫 Abhishek Thakur 的数据科学家&#xff0c;在他的 Linkedin 发表了一篇文章 Approaching (Almost) Any Machine Learning Problem&#xf…

mysql中char与varchar的区别分析(补充一句,int和integer没区别)

转自&#xff1a;http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢&#xff0c;都是用来存储字符串的&#xff0c;只是他们的保存方式不一样罢了&#xff0c;char有固定的长度&#xff0c;而varchar属于可变长的字符类型。har与varchar的区别 &#…

CUDA Samples: Streams' usage

以下CUDA sample是分别用C和CUDA实现的流的使用code&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第十章&#xff0c;各个文件内容如下&#xff1a;funset.cpp:#include "funset.hpp" #include <random&…

你的神经网络不起作用的37个理由

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;作者 | Slav Ivanov译者 | 吴金笛校对 | 丁楠雅、林亦霖编辑 | 王菁来源 | 数据派THU&#xff08;ID&#xff1a;DatapiTHU&#xff09;【导语】本文列举了在搭建神经网络过程中的37个易错点&#xff0c;并给出了…

菜鸟Vue学习笔记(三)

菜鸟Vue学习笔记&#xff08;三&#xff09;本周使用了Vue来操作表单&#xff0c;接下来说下Vue中双向绑定表单元素的用法。Vue中双向绑定是使用的v-model&#xff0c;所谓的双向绑定即改变变量的值&#xff0c;表单元素的值也会改变&#xff0c;同样的&#xff0c;改变表单元素…

Python中的注释(转)

一、单行注释单行注释以#开头&#xff0c;例如&#xff1a;print 6 #输出6二、多行注释&#xff08;Python的注释只有针对于单行的注释&#xff08;用#&#xff09;&#xff0c;这是一种变通的方法&#xff09;多行注释用三引号将注释括起来&#xff0c;例如:多行注释多行注释三…

CUDA Samples: dot product(使用零拷贝内存)

以下CUDA sample是分别用C和CUDA实现的点积运算code&#xff0c;CUDA包括普通实现和采用零拷贝内存实现两种&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第十一章&#xff0c;各个文件内容如下&#xff1a;funset.cp…

一文读懂线性回归、岭回归和Lasso回归

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;作者 | 文杰编辑 | yuquanle本文介绍线性回归模型&#xff0c;从梯度下降和最小二乘的角度来求解线性回归问题&#xff0c;以概率的方式解释了线性回归为什么采用平方损失&#xff0c;然后介绍了线性回归中常用的…

tf.matmul / tf.multiply

import tensorflow as tfimport numpy as np 1.tf.placeholder placeholder()函数是在神经网络构建graph的时候在模型中的占位&#xff0c;此时并没有把要输入的数据传入模型&#xff0c;它只会分配必要的内存。 等建立session&#xff0c;在会话中&#xff0c;运行模型的时候通…

Java 匿名类也能使用构造函数

为什么80%的码农都做不了架构师&#xff1f;>>> 匿名类虽然没有名字&#xff0c;但可以有一个初始化块来充当构造函数。 public enum Ops {ADD, SUB} public class Calculator { private int i, j, result; public Calculator() {} public Calculator(int _i, …

CUDA Samples: matrix multiplication(C = A * B)

以下CUDA sample是分别用C和CUDA实现的两矩阵相乘运算code即C A*B&#xff0c;CUDA中包含了两种核函数的实现方法&#xff0c;第一种方法来自于CUDA Samples\v8.0\0_Simple\matrixMul&#xff0c;第二种采用普通的方法实现&#xff0c;第一种方法较快&#xff0c;但有些复杂&am…

业界首个实时多目标跟踪系统开源

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;作者 | CV君来源 | 我爱计算机视觉&#xff08;ID&#xff1a;aicvml&#xff09;相对业界研究比较多的单目标跟踪&#xff0c;多目标跟踪&#xff08;Multi-Object Tracking&#xff0c;MOT&#xff09;系统在实…

python基础 练习题

【练习题1】实现一个整数加法计算器如 content input(">>> ") # 59 , 64 count0 while 1:contentinput(>>>)s1 content.split()print(s1)count 0for i in s1:count int(i)print(count) 【练习题2】请编写1 - 100 所有数的和 sum0 for i in r…

[再寄小读者之数学篇](2014-04-18 from 352558840@qq.com [南开大学 2014 年高等代数考研试题]二次型的零点)...

(2014-04-18 from 352558840qq.com [南开大学 2014 年高等代数考研试题]) 设 ${\bf A}$ 为实对称矩阵, 存在线性无关的向量 ${\bf x}_1,{\bf x}_2$, 使得 ${\bf x}_1^T{\bf A}{\bf x}_1>0$, ${\bf x}_2^T{\bf A}{\bf x}_2<0$. 证明: 存在线性无关的向量 ${\bf x}_3,{\bf …

从0到1详解推荐系统中的嵌入方法,原理、算法到应用都讲明白了

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;作者丨gongyouliu编辑丨lily来源 | 大数据与人工智能&#xff08;ID&#xff1a;&#xff09;前言作者曾在这篇文章中提到&#xff0c;矩阵分解算法是一类嵌入方法&#xff0c;通过将用户行为矩阵分解为用户特征矩…

iOS-Swift中的递增(++)和递减(--)被取消的原因-官方答复

众所周知&#xff0c;在很多编程语言中&#xff0c;对一个变量递增1用&#xff0c;递减1用--&#xff0c;在Swift3之前也是可以这么用的&#xff0c;但之后被取消了。 所以在目前Swift5的版本中&#xff0c;只能用1和-1来进行递增和递减了 如果坚持用或--将会提示以下错误&…