刚开始做功能的时候,发现有个“面包屑”导航的功能穿插到了所有的页面。这个看似不起眼的小功能以前没有注意过,现在决定来实现一下

所谓面包屑,即页面层级导航,例如

首页>>我的博客>>随笔

观察了一下这个结构,分析如下:

1.结构肯定是父子结构,即树形结构

2.需要事先把这种结构的数据存放好,在页面上动态加载

好了,思路有了,开始实现。首先看第一条,通常解决这种树形结构的方案是用数据库或者XML,但是我不想再项目中用IO读取文件,所以决定用数据库,建好表(T_Navigator),包括id,action,control,name,parentid字段。其中action放页面的action名,control放控制器名,name放页面名称,parentid放上层页面地址

在global的Application_Start里面使用HttpRuntime.Cache.Insert,把数据库中读取T_Navigator表的列表放入HttpRuntime.Cache中,当然,这里也可以用static的全局变量或者httpcontext.cache,但是用HttpRuntime性能会好点,特别是数据量大的时候。

接下来在模板view中获得当前页面的view和control

//获得当前页面control名称
string control = ViewContext.RouteData.Route.GetRouteData(this.Context).Values["controller"].ToString();
//获得当前页面action名称
string action = ViewContext.RouteData.Route.GetRouteData(this.Context).Values["action"].ToString();

然后扩展Htmlhelper,写一个返回MvcHtmlString类型的扩展方法GetNavigator(control, action),先获得HttpRuntime.Cache中的导航信息列表,然后传入action和control,找到当前页面的id和name,通过迭代找到所有的父页面的id和name,根据前端需求(例如a标签或者span或者其他标签),拼接成xxx>>xxx>>xxx的形式,然后返回MvcHtmlString

最后在模板view上用  @Html.GetNavigator(control, action)即可获得面包屑导航。

使用这个方法要注意几点:

1.新增view或者新的action的时候,只要是要刷新页面的时候,都要在T_Navigator中加入对应的信息

2.T_Navigator加入了新的页面,需要重启IIS或者重新生成,因为T_Navigator中的数据是载入缓存的

大型B2B网站开发手记 2的更多相关文章

  1. 大型B2B网站开发手记 1

    本手记记录所有该B2B网站开发中遇到的问题和解决方法,一方面给大家一些思路,一方面提升自己,记录整个过程 1. 测试环境部署问题 部署环境是server2012 R2,部署上去发现WCF报错如下 sv ...

  2. 大型php网站性能和并发访问优化方案(转载自php中文网)

               网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎 ...

  3. CGI、ASP、PHP、JSP、 ASP.NET网站开发语言比较

    一.主流网站开发语言的简介及优缺点. 现在主流的网站开发语言主要包括cgi.asp.php.asp.net.jsp等. HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持. (一)  ...

  4. [转]Nodejs开发框架Express4.x开发手记

    Express: ?web application framework for?Node.js? Express 是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮 ...

  5. 大型php网站性能和并发访问优化方案

    网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎么进行整体性能优化呢? ...

  6. 【odoo14】第十四章、CMS网站开发

    第十四章.CMS网站开发** Odoo有一个功能齐全的内容管理系统(CMS).通过拖放功能,你的最终用户可以在几分钟内设计一个页面,但是在Odoo CMS中开发一个新功能或构建块就不是那么简单了.在本 ...

  7. sonn_game网站开发01:写在最前面

    之前做的个人博客项目,日向博客现在已经进入后期完善阶段了.是时候开始打造一个新坑了. 然而改造个什么坑呢?构思了好几天,想了好多方案,都觉得没啥动手欲望.因为,我想做的是那种,自己能用得上,而且有一定 ...

  8. MVC5 网站开发之九 网站设置

    网站配置一般用来保存网站的一些设置,写在配置文件中比写在数据库中要合适一下,因为配置文件本身带有缓存,随网站启动读入缓存中,速度更快,而保存在数据库中要单独为一条记录创建一个表,结构不够清晰,而且读写 ...

  9. MVC5网站开发之一 总体概述

    由于前几次都没能写完,这次年底总算有自由时间了,又想继续捣鼓一下.于是下载了VS 2015专业版(不知为什么我特别钟爱专业版,而不喜欢企业版).由于以前的教训,我这次决定写一个极简的Deom,简到什么 ...

随机推荐

  1. jQuery Mobile 中创建按钮

    在 jQuery Mobile 中创建按钮 jQuery Mobile 中的按钮可通过三种方法创建: 使用 <button> 元素 使用 <input> 元素 使用 data- ...

  2. DOM事件机制进一步理解

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. Gradle笔记系列(二)

    1.使用Gradle命令行 在这篇博客中,我们将简要介绍Gradle命令行的使用. 1.1 执行多任务 通过在命令行列出每个任务(task),你可以在一次构建(build)中执行多个任务.例如,命令g ...

  4. 抽象工厂模式 shiyanlou

    二.什么是 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种软件开发设计模式.抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来.如果比较抽象工 ...

  5. myeclipse安装flex插件后代码无自动提示及自动补全无效的解决办法

    在myeclipse配置flex插件后,可能会产生快捷键的冲突,或者快捷键设置被修改的情况,本文探索其解决办法 在卸载flex插件后,myeclipse的快捷键设置并不会自动还原,这需要我们手动设置. ...

  6. 第一课1、ROS

    ---恢复内容开始--- 1.什么是ROS ROS起源于2007年,斯坦福大学的人工智能实验室与机器人技术公司Willow Garage针对其个人机器人项目开发了ROS的雏形. ROS大致每年发布一个 ...

  7. 建站阿里云、amh主机面版

    阿里云 Nginx+tomcat7+Mencached负载均衡集群配置 http://blog.csdn.net/zht666/article/details/38515147 apache2.2.1 ...

  8. HTML5之tabindex属性

    1 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&g ...

  9. php生成器的使用

    按照php的文档说明 一个生成器函数看起来像一个普通的函数,不同的是普通函数返回一个值,而一个生成器可以yield生成许多它所需要的值. 当一个生成器被调用的时候,它返回一个可以被遍历的对象.当你遍历 ...

  10. phpStudy 的Apache虚拟主机配置

    放弃了wamp,朋友介绍了phpstudy,不错的一款软件,关键是能自由切换php版本.相关的阿帕奇虚拟主机配置参考:http://www.th7.cn/system/win/201506/10846 ...