大型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,简到什么 ...
随机推荐
- java中的static使用--静态变量、静态方法
Java 中的 static 使用之静态变量 大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 s ...
- Python:进程
由于GIL的存在,python一个进程同时只能执行一个线程.因此在python开发时,计算密集型的程序常用多进程,IO密集型的使用多线程 1.多进程创建: #创建方法1:将要执行的方法作为参数传给Pr ...
- jetty服务器启动方法总结【备用】
1. 使用Java命令启动 java -jar start.jar ctrl + c 关闭 终端窗口一直存在 2. 使用Java命令启动2 java -jar start.jar & 启动成功 ...
- prim
prim算法很难,但是我也把他写出来了.usaco3.1.1 #include <iostream> #include <cstring> using namespace st ...
- 有向图强连通分量的Tarjan算法
有向图强连通分量的Tarjan算法 [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G ...
- 1.1使用内置的Camara应用程序捕捉图像
一: Camara应用程序包含的意图过滤器 <intent-filter> <action android:name="android.media.action.IMAGE ...
- 搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- C# 中科学计数法转成正常值
抓取数据的时候碰到科学技术法,查了一些资料,直接贴代码 /// <summary> /// 数字科学计数法处理 /// </summary> /// <param nam ...
- caffe net 可视化工具
http://ethereon.github.io/netscope/#/editor 将对应的网络输入到里面,然后按shift+enter即可查看对应的网络结构
- JAVA求解线性方程组-列主元高斯消去法
package MyMath; import java.util.Scanner; public class Gauss { /** * @列主元高斯消去法 */ static double x[]; ...