大型B2B网站开发手记 2
刚开始做功能的时候,发现有个“面包屑”导航的功能穿插到了所有的页面。这个看似不起眼的小功能以前没有注意过,现在决定来实现一下
所谓面包屑,即页面层级导航,例如
首页>>我的博客>>随笔
观察了一下这个结构,分析如下:
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的更多相关文章
- 大型B2B网站开发手记 1
本手记记录所有该B2B网站开发中遇到的问题和解决方法,一方面给大家一些思路,一方面提升自己,记录整个过程 1. 测试环境部署问题 部署环境是server2012 R2,部署上去发现WCF报错如下 sv ...
- 大型php网站性能和并发访问优化方案(转载自php中文网)
网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎 ...
- CGI、ASP、PHP、JSP、 ASP.NET网站开发语言比较
一.主流网站开发语言的简介及优缺点. 现在主流的网站开发语言主要包括cgi.asp.php.asp.net.jsp等. HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持. (一) ...
- [转]Nodejs开发框架Express4.x开发手记
Express: ?web application framework for?Node.js? Express 是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮 ...
- 大型php网站性能和并发访问优化方案
网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎么进行整体性能优化呢? ...
- 【odoo14】第十四章、CMS网站开发
第十四章.CMS网站开发** Odoo有一个功能齐全的内容管理系统(CMS).通过拖放功能,你的最终用户可以在几分钟内设计一个页面,但是在Odoo CMS中开发一个新功能或构建块就不是那么简单了.在本 ...
- sonn_game网站开发01:写在最前面
之前做的个人博客项目,日向博客现在已经进入后期完善阶段了.是时候开始打造一个新坑了. 然而改造个什么坑呢?构思了好几天,想了好多方案,都觉得没啥动手欲望.因为,我想做的是那种,自己能用得上,而且有一定 ...
- MVC5 网站开发之九 网站设置
网站配置一般用来保存网站的一些设置,写在配置文件中比写在数据库中要合适一下,因为配置文件本身带有缓存,随网站启动读入缓存中,速度更快,而保存在数据库中要单独为一条记录创建一个表,结构不够清晰,而且读写 ...
- MVC5网站开发之一 总体概述
由于前几次都没能写完,这次年底总算有自由时间了,又想继续捣鼓一下.于是下载了VS 2015专业版(不知为什么我特别钟爱专业版,而不喜欢企业版).由于以前的教训,我这次决定写一个极简的Deom,简到什么 ...
随机推荐
- ZooKeeper概述(转)
译自http://zookeeper.apache.org/doc/trunk/zookeeperOver.html ZooKeeper是一个用于分布式应用的开源分布式协调服务.它提供了简单的原语集合 ...
- php版本引起的const问题
刚刚遇到一个问题,类中定义了一个常量: const USER = ['aa', 'bb', 'cc']; 在类中的静态函数中调用以上常量不会出错.网站中所有的网页均能正常打开. 而当push到线上后, ...
- Java 基础之-枚举
目录(?)[-] 用法一常量 用法二switch 用法三向枚举中添加新方法 用法四覆盖枚举的方法 用法五实现接口 用法六使用接口组织枚举 用法七关于枚举集合的使用 DK1.5引入了新的类型-- ...
- java多线程详解(5)-Threadlocal用法
ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路. 使用这个工具类可以很简洁 ...
- 根据第三方库spire.pdf使用指定打印机打印pdf文件
private void button1_Click(object sender, EventArgs e) { PdfDocument doc = new PdfDocument(); string ...
- .NET 4.0 中超长路径超长文件名的问题
1. 昨天开发中遇到一个问题,场景如下: 客户端从服务器下载一个文件并解压,客户端在使用后需要做清理操作(删除解压出来的文件),结果删除失败,抛出如下异常: The specified path, f ...
- webService 跨域请求webconfig配置
在webService文件夹下单独添加一个web.config <?xml version="1.0" encoding="UTF-8"?>< ...
- JQuery初体验
虽然做b/s也有一年半了,但是还没怎么认真的去看JQuery,趁自己生病的这几天,恶补一下JQuery方面的知识,保持学习的态度,内容很简单,聊以自慰一下>_<.废话不多说,直接上代码了. ...
- hibernate配置 sqlserver 数据库自动增长
<id name="Id" type="integer"> <column name="userid" > < ...
- 【洛谷P3143】Diamond Collector
算是一道dp 首先,排序好每一个架子上都是一段区间,然后只需要统计每个点向左向右最长延伸的区间. 所以我们预处理出每个点以左.以右最大能延伸的长度(最多能选几个差值不超过k的) 然后枚举每个点作为断点 ...