我的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与站点地图】的更多相关文章

  1. MVC小系列(九)【引入namespace】

    以前在页面引入一个namespace,可以这样: <%@ Import Namespace="Web.Helpers" %> 如果空间是所有页面都需要的,可以写进配置文 ...

  2. MVC小系列(八)【改变Areas的FindView顺序】

    MVC小系列(八)[改变Areas的FindView顺序] 一般项目比较大的话,会根据模块建立Areas,这样结构清晰,也有利于路由的部署, 1 Areas下有自己的_LayOut模板,而如果希望所有 ...

  3. MVC小系列(七)【分部视图中的POST】

    MVC小系列(七)[分部视图中的POST] 在PartialView中进行表单提交的作用:1 这个表单不止一个地方用到,2 可能涉及到异步的提交问题 这两种情况都可能需要把表单建立在分部视图上, 使用 ...

  4. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】

    <Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  5. 学习ASP.NET Core Razor 编程系列十九——分页

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  6. MVC自学系列之三(MVC视图-Views)

    View的约定 1.根据约定,Views目录下包含着每一个与Controller同名但是没有像Controller后缀的文件夹:因此对于控制器HomeController就对应在views目录下有个目 ...

  7. Katalon系列十九:元素相同或无法定位时的定位技巧

    经常看到有人问元素属性都相同,怎么定位,这里总结一下.下面以Xpath为例讲解,CSS其实也是一样的,只是语法不一样罢了.网上说CSS会比Xpath快一些,但在Katalon主用Xpath,感觉也还行 ...

  8. MVC小系列(二十二)【MVC的Session超时,导致的跳转问题】

    由于mvc内部跳转机制的问题,它只在当前的action所渲染的view上进行跳转,如果希望在当前页面跳,需要将mvc方法改为js方法: filterContext.Result = new Redir ...

  9. MVC小系列(十八)【给checkbox和radiobutton添加集合的重载】

    mvc对DropDownListFor的重载很多,但对checkbox和radiobutton没有对集合的重载 所以该讲主要针对集合的扩展: #region 复选框扩展 /// <summary ...

随机推荐

  1. c# PrintDocument 设置自定义纸张大小的示例

    .Net 提供的打印类PrintDocument 非常简洁易用,不过在实际应用开发中往往需要对纸张进行自定义,尤其是需要进行票据打印时.这个问题也困扰了我许久,经过查阅相关的资料和多次尝试,发现 其实 ...

  2. ZOJ3732 Graph Reconstruction Havel-Hakimi定理

    分析: 给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化. 进一步,若图为简单图,则称此序列可简单图化 (来自百度百科) 可简单图化的判定可以用Have ...

  3. Api项目压力测试知识荟萃

    并发用户.在线用户和注册用户以及彼此之间的换算方法(估算模型).系统的最大并发用户数根据注册用户数来获得,换算方法一般是注册总人数的5%-20%之间:系统的并发数根据在线人数来获得,换算方法一般是在3 ...

  4. ActiveMQ的安全机制使用及其源代码分析 [转]

    ActiveMQ是目前较为流行的一款开源消息服务器.最近在项目开发中,需要为ActiveMQ开发基于IP的验证和授权机制,因此,对ActiveMQ的安全机制进行了了解,以下将介绍ActiveMQ的安全 ...

  5. ms sql server缓存清除与内存释放

    Sql Server系统内 存管理在没有配置内存最大值,很多时候我们会发现运行Sql Server的系统内存往往居高不下.这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系 ...

  6. SQL Server查询性能优化——创建索引原则(一)

    索引是什么?索引是提高查询性能的一个重要工具,索引就是把查询语句所需要的少量数据添加到索引分页中,这样访问数据时只要访问少数索引的分页 就可以.但是索引对于提高查询性能也不是万能的,也不是建立越多的索 ...

  7. sunlime操作

    ctrl+p 查找文件  @进行符号查找ctrl+h 替换文件 选中字符以后多次按 ctrl+D 跳过则按 ctrl+Kctrl+shift+d 复制多行alt+f3 多选 ctrl+shift+p ...

  8. Linux vim的一些命令

    一.vi/vim的多行注释及取消注释 1.多行注释 (1) 进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来 (2) 按大写字母 ...

  9. 学习微信小程序之css13关于盒子外边距的合并

  10. Oracle Tnsping慢

    http://www.linuxidc.com/Linux/2014-02/96167.htm http://www.askmaclean.com/archives/dns%E8%AE%BE%E7%B ...