MVC小系列(十九)【mvc与站点地图】
我的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>
MVC小系列(十九)【mvc与站点地图】的更多相关文章
- MVC小系列(九)【引入namespace】
以前在页面引入一个namespace,可以这样: <%@ Import Namespace="Web.Helpers" %> 如果空间是所有页面都需要的,可以写进配置文 ...
- MVC小系列(八)【改变Areas的FindView顺序】
MVC小系列(八)[改变Areas的FindView顺序] 一般项目比较大的话,会根据模块建立Areas,这样结构清晰,也有利于路由的部署, 1 Areas下有自己的_LayOut模板,而如果希望所有 ...
- MVC小系列(七)【分部视图中的POST】
MVC小系列(七)[分部视图中的POST] 在PartialView中进行表单提交的作用:1 这个表单不止一个地方用到,2 可能涉及到异步的提交问题 这两种情况都可能需要把表单建立在分部视图上, 使用 ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】
<Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- 学习ASP.NET Core Razor 编程系列十九——分页
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- MVC自学系列之三(MVC视图-Views)
View的约定 1.根据约定,Views目录下包含着每一个与Controller同名但是没有像Controller后缀的文件夹:因此对于控制器HomeController就对应在views目录下有个目 ...
- Katalon系列十九:元素相同或无法定位时的定位技巧
经常看到有人问元素属性都相同,怎么定位,这里总结一下.下面以Xpath为例讲解,CSS其实也是一样的,只是语法不一样罢了.网上说CSS会比Xpath快一些,但在Katalon主用Xpath,感觉也还行 ...
- MVC小系列(二十二)【MVC的Session超时,导致的跳转问题】
由于mvc内部跳转机制的问题,它只在当前的action所渲染的view上进行跳转,如果希望在当前页面跳,需要将mvc方法改为js方法: filterContext.Result = new Redir ...
- MVC小系列(十八)【给checkbox和radiobutton添加集合的重载】
mvc对DropDownListFor的重载很多,但对checkbox和radiobutton没有对集合的重载 所以该讲主要针对集合的扩展: #region 复选框扩展 /// <summary ...
随机推荐
- date命令--修改linux系统时间
在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数 ...
- 安装solr
安装之前先关闭防火墙.安装好jdk和tomcat 1.启动tomcat的命令为:apache-tomcat-7.0.61/bin/startup.sh 2.拷贝solr目录下example/webap ...
- bzoj 2285 [Sdoi2011]保密(二分,spfa + 最大流)
Description 现在,保密成为一个很重要也很困难的问题.如果没有做好,后果是严重的.比如,有个人没有自己去修电脑,又没有拆硬盘,后来的事大家都知道了. 当然,对保密最需求的当然是军方,其次才是 ...
- JavaScript基本概念(一) v0.5
摘要:先简单介绍ECMAScript的语法(如果有其他类C的经验,这个很好理解),接着介绍了ECMAScript的数据类型:Number.Boolean.String.Undefined和Null类型 ...
- 使用Windows Azure创建Windows系统虚拟机-下
如何在创建虚拟机之后登录虚拟机 这部分将展示如何登录到虚拟机,所以你可以管理它的设置和你会上面运行的应用程序. 注意: 对于要求和故障排除技巧,请参阅“使用RDP或SSH连接到Azure虚拟机”( C ...
- YUV转灰度
转载自:http://blog.csdn.net/sxjk1987/article/details/7470545 标准的V4L2 API http://v4l.videotechnology.com ...
- HDU4763 - Theme Section(KMP)
题目描述 给定一个字符串S,要求你找到一个最长的子串,它既是S的前缀,也是S的后缀,并且在S的内部也出现过(非端点) 题解 CF原题不解释....http://codeforces.com/probl ...
- [MySQL]快速解决"is marked as crashed and should be repaired"故障
具体报错如下: Table '.\Tablename\posts' is marked as crashed and should be repaired 提示说论坛的帖子表posts被标记有问题,需 ...
- Block介绍(一)基础
一.概述 Block是C级别的语法和运行时特性.Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存.堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block ...
- ASIHTTPRequest 中url参数中文乱码
ASIHTTPReques确实是在开发过程中,数据的传输,获取方面给我们很大的帮助.然而在一些方面也是需要一些的注意. 在我们使用ASIHTTPReques 进行get方式获取数据时,如果需要传入中文 ...