ASP.net教程]大湿教我写.net通用权限框架之菜单导航篇

一、坑爹的老板

“我X!这个项目是要商业应用的,你还想用easyUI,500美刀的授权费用。一个项目才赚多少钱!赶紧给我换了,明天去客户那边要做demo的,今天晚上必须给我赶出来!不懂的去问大雄”黄总对我又是一通大吼。

我容易嘛我,以前做CS架构系统的,现在突然让我转BS,前端开发实在太费力了。更要命的是还碰上一个SB坑爹的小老板。公司一共就三个人,老板(抠得要死,不知道怎么讨到老婆的)、大雄(大湿级攻城湿,BS前端开发大牛)、我(屌丝码农)。

二、开工搞起

好吧,老板都发话了,自己重做吧,啥都要搞免费的,怕侵犯别人版权,自己下的片全是正版的么?现在的人啊。。。发再多的牢骚也没用,UI还是得自己写,先弄个好看点的主界面吧,里面的功能随便糊弄下数据库都懒得连。。这次要做的demo是一个后台管理系统,菜单导航做成手风琴的会显得比较大方。那就做成手风琴的吧。经过网上一番搜索,我决定把菜单导航做成下面这个样子

问题来了,上面这个界面是很好看,关键是我不会做呀!那我这个菜鸟只好向大雄大师求教了。

我:“大雄,这个导航菜单怎么做?”

大雄:“没时间,我在改BUG。”

我:“老板让我问你的。”

大雄:“我帮你把界面做好,你能帮我把这250个BUG和需求全改掉?明天就要,多谢你了”

我:“唉,我有个女同学让我帮忙介绍个男朋友”

大雄:“刚好我现在有时间,我先帮你弄”

大雄过来看了一眼我同学的照片说:“网址不是都有了么,自己按F12,什么都有的,我忙去了。。。”

我了个去什么人呀,看人家长得抽象点就撂挑子了,那就F12吧,

擦!F12真是个好东西呀,按一下什么html标记、css样式全有了。原来所谓的前端大湿也不过如此嘛!

不断的ctrl+C、和ctrl+v后,自己再写了点js脚本的我的界面出来啦!!!!完全实现了左侧树状导航,点击完导航在右侧以选项卡的形式打开标签。

这里跟大家分享一下主要思路:

1)每个菜单按钮其实就是一个div,子菜单就是上级div里嵌套div。div真的是个好东西,里面什么东西都能放,菜单图标,样式都可以很好的控制。

2)右侧以选项卡方式打开标签其实是给div加了个onclick事件点击以后在右侧有两个动作:1、加一个iframe,里面放页面内容。2、加一个标签跟页面对应,可以控制页面的显示隐藏和关闭。

附打标签选项卡代码

 1 //=================动态菜单tab标签======================== 2 function AddTabMenu(tabid, url, name, img, Isclose, IsReplace) { 3   SetSystemId(tabid); 4   if (url == "" || url == "#") { 5     url = "/ErrorPage/404.aspx"; 6   } 7   var tabs_container = top.$("#tabs_container"); 8   var ContentPannel = top.$("#ContentPannel"); 9   if (IsReplace == ‘true‘) {10     top.RemoveDiv(tabid);11   }12   if (Isclose != ‘false‘) { //判断是否带关闭tab13     top.$(".navigation").hide();14   } else {15     top.$(".navigation").show();16   }17   if (top.document.getElementById("tabs_" + tabid) == null) { //如果当前tabid存在直接显示已经打开的tab18     Loading(true);19     tabs_container.find(‘li‘).removeClass(‘selected‘);20     ContentPannel.find(‘iframe‘).hide();21     if (Isclose != ‘false‘) { //判断是否带关闭tab22       tabs_container.append("<li id=\"tabs_" + tabid + "\" class=‘selected‘ win_close=‘true‘><span title=‘" + name + "‘ onclick=\"javascript:AddTabMenu(‘" + tabid + "‘,‘" + url + "‘,‘" + name + "‘,‘" + img + "‘,‘true‘)\"><a href=\"javascript:;\"><img src=\"/Themes/Images/32/" + img + "\" width=\"20\" height=\"20\">" + name + "</a></span><a class=\"win_close\" title=\"关闭当前窗口\" onclick=\"RemoveDiv(‘" + tabid + "‘)\"></a></li>");23     } else {24       tabs_container.append("<li id=\"tabs_" + tabid + "\" class=\"selected\" onclick=\"javascript:AddTabMenu(‘" + tabid + "‘,‘" + url + "‘,‘" + name + "‘,‘" + img + "‘,‘false‘)\"><a><img src=\"/Themes/Images/32/" + img + "\" width=\"20\" height=\"20\">" + name + "</a></li>");25     }26     ContentPannel.append("<iframe id=\"tabs_iframe_" + tabid + "\" name=\"tabs_iframe_" + tabid + "\" height=\"100%\" width=\"100%\" src=\"" + url + "\" frameBorder=\"0\"></iframe>");27   }28   else {29     tabs_container.find(‘li‘).removeClass(‘selected‘);30     ContentPannel.find(‘iframe‘).hide();31     tabs_container.find(‘#tabs_‘ + tabid).addClass(‘selected‘);32     top.document.getElementById("tabs_iframe_" + tabid).style.display = ‘block‘;33   }34 }35 //关闭当前tab36 function ThisCloseTab() {37   var tabs_container = top.$("#tabs_container");38   top.RemoveDiv(tabs_container.find(‘.selected‘).attr(‘id‘).substr(5));39 }40 //关闭事件41 function RemoveDiv(obj) {42   var tabs_container = top.$("#tabs_container");43   var ContentPannel = top.$("#ContentPannel");44   tabs_container.find("#tabs_" + obj).remove();45   ContentPannel.find("#tabs_iframe_" + obj).remove();46   var tablist = tabs_container.find(‘li‘);47   var pannellist = ContentPannel.find(‘iframe‘);48   if (tablist.length > 0) {49     tablist[tablist.length - 1].className = ‘selected‘;50     pannellist[tablist.length - 1].style.display = ‘block‘;51   }52   if (tablist.length == ‘1‘) {53     top.$(".navigation").show();54   }55 }

三、举一反三

我:“大雄,原来做前端就是这么简单呀,套套js和样式,P两张好看点的图,找几张图片,什么样的界面出不来呀”

大雄:“可不就是这么简单么,只是你太SB而已,到现在才明白”

好吧!你牛,我TM把你以前那两套UI前端界面也仿出来,不就是F12么,我js好歹还是会点的。半小时后。。。

四、动态加载

“哦耶耶,你之前弄的那几套风格的界面都让我扒过来了”

大雄:“哟!我穿过的,都让你给扒了,不错嘛,名师出高徒呀”

我:“狗P名湿,你教我啥啦?”

大雄:“F12呀,对了你那个菜单能动态加载吗?”

我:“动态加载?html的怎么动态加载?”

大雄:“你SB呀,你不知道用JS从后台获取菜单数据,然后自动拼接出菜单来,再加载,不就动态了么?会个F12就这么嚣张了”

我:“JS里面可以拼接html,你怎么不早讲,什么东西都藏着掖着的”

大雄:“我这么忙,你不问我,我怎么知道你想要什么,你当我是websocket时不是还给你那个消息推送啊。”

好吧,还是得自己来做,那个清高的大湿只会骂我的时候话多一点。。。

动态加载要做到以下几步:

1、要在数据库里建立菜单,表结构如下:


序号


列名


数据类型


长度


小数位


标识


主键


外键


允许空


默认值


说明


1


MenuId


varchar


50


0




菜单主键


2


ParentId


varchar


50


0



父级主键


3


Code


varchar


50


0



编号


4


FullName


varchar


50


0



名称


5


Description


varchar


200


0



描述


6


Img


varchar


50


0



图标


7


Category


varchar


50


0



菜单分类


8


NavigateUrl


varchar


200


0



导航地址


9


FormName


varchar


200


0



窗体名


10


Target


varchar


50


0



目标


11


IsUnfold


int


4


0



是否展开


12


AllowEdit


int


4


0



允许编辑


13


AllowDelete


int


4


0



允许删除


14


Enabled


int


4


0



1


有效:1-有效,0-无效


15


SortCode


int


4


0



排序吗


16


DeleteMark


int


4


0



1


删除标记:1-正常,0-删除


17


CreateDate


datetime


8


3



getdate


创建时间


18


CreateUserId


varchar


50


0



创建用户主键


19


CreateUserName


varchar


50


0



创建用户


20


ModifyDate


datetime


8


3



修改时间


21


ModifyUserId


varchar


50


0



修改用户主键


22


ModifyUserName


varchar


50


0



修改用户

主要字段介绍:

ParentID:父级主键,正确的带出多级下拉菜单。

Img:图片路径,前台加载时根据路径加载菜单图标,使菜单看起来更加漂亮。

SortCode:菜单显示的顺序。

2、通过jquery调用ajax调用数据库,从数据库中把菜单的父节点,图片地址、排序方式等调出来,这种后台代码大家都熟就不做详细描述了。

3、页面载入时动态加载,根据ajax方法返回的json数据动态拼接html代码,就跟我们平时写C#代码一样,就是拼接个动态字符串,代码如下

  function resizeLayout() {      resizeU();      $(window).resize(resizeU);      function resizeU() {        var accordion_head = $(‘.accordion > li > a‘),         accordion_body = $(‘.accordion li > .sub-menu‘);        $(".sub-menu").css(‘height‘, $(".navigation").height() - 19 - accordion_head.length * accordion_head.height() - accordion_head.length + ‘px‘);        accordion_head.first().addClass(‘active‘).next().slideDown(‘normal‘);        accordion_head.on(‘click‘, function (event) {          event.preventDefault();          if ($(this).attr(‘class‘) != ‘active‘) {            accordion_body.slideUp(‘normal‘);            $(this).next().stop(true, true).slideToggle(‘normal‘);            accordion_head.removeClass(‘active‘);            $(this).addClass(‘active‘);          }        });      }    }    //手风琴导航菜单    var AccordionMenuJson = "";    function GetAccordionMenu() {      var index = 0;      var html = "";      getAjax("Frame.ashx", "action=LoadFirstMenu", function (data) {        AccordionMenuJson = eval("(" + data + ")");        $.each(AccordionMenuJson, function (i) {          if (AccordionMenuJson[i].ParentId == ‘9f8ce93a-fc2d-4914-a59c-a6b49494108f‘) {            if (index == 0) {              html += "<li><a style=\"border-top: 0px solid #ccc;\"><img src=\"/Themes/Images/32/" + AccordionMenuJson[i].Img + "\">" + AccordionMenuJson[i].FullName + "</a>";            } else {              html += "<li><a><img src=\"/Themes/Images/32/" + AccordionMenuJson[i].Img + "\">" + AccordionMenuJson[i].FullName + "</a>";            }            html += GetSubmenu(AccordionMenuJson[i].MenuId);            html += "</li>";            index++;          }        });      })      $(".accordion").append(html);    }    //子菜单    function GetSubmenu(MenuId) {      var html = "";      html += "<div class=\"sub-menu\">";      $.each(AccordionMenuJson, function (i) {        if (AccordionMenuJson[i].ParentId == MenuId) {          html += "<div onclick=\"AddTabMenu(‘" + AccordionMenuJson[i].MenuId + "‘, ‘" + AccordionMenuJson[i].NavigateUrl + "‘, ‘" + AccordionMenuJson[i].FullName + "‘, ‘" + AccordionMenuJson[i].Img + "‘, ‘true‘);\" ><img src=\"/Themes/Images/32/" + AccordionMenuJson[i].Img + "\">" + AccordionMenuJson[i].FullName + "</div>";        }      });      html += "</div>";      return html;    }

后台的拼接出这些代码以后,就跟我们按F12键以后得到的结果是一样的。

运行一下,咦,怎么界面上啥东西都没有?我擦,忘了在数据库里添加几个测试菜单,当然是空的了。

三分钟后。。。

“大雄,大雄!!!好啦!可以啦。”

怎么没人了?一看时间两点多了。。。还得加几个功能页面进去才可以做demo

唉,苦逼的程序猿伤不起呀。。。。。

谨以此文献给那些像我一样的前端菜鸟,大神们不喜忽喷。。。

附演示地址:

http://223.86.105.239:801  触摸屏版风格

http://223.86.105.239:802  手风琴版风格

http://223.86.105.239:803  桌面版风格

时间: 2024-10-27 17:54:08

ASP.net教程]大湿教我写.net通用权限框架之菜单导航篇的相关文章

【转】快速开发平台:大湿教我写程序(3)之自动补全(屌丝没有春天)篇

一.女神也爱玩撸码 "在么,亲." "在!在!有,有事么"(我真睡醒了么!垂涎了好久的女神呀!高中同学,高一向她表白,"我想找个170以上的",高二等我长到170了"我想找个175的",高三下血本买了双内增高"我喜欢178以上的,有安全感") 三分钟后.... "没事也可找我的."擦,我TM怎么这么不争气,不是发过誓等她主动跟我讲话的时候就送她一个字:滚! "有个网页不会做,你

【嵌入式4412开发板学习教程】Uboot教程之uboot基础概念和框架

[4412开发板教程]Uboot教程之uboot基础概念和框架 正在学习uboot,教程讲解的很详细,先上个笔记,视频上传到网盘后再补上...... 知识点: 1.操作系统分层的概念 Windows:bios→内核模式→用户模式→用户程序 linux:bootloader→内核→文件系统→用户程序 2.bootboader种类介绍 U-boot是最通用的bootboader.(210,4412等等) vivi 针对三星的ARM来定制2440上有用到 3.4412休眠问题 它可以直接跳过uboot

手把手教你写一个通用的helm chart

[TOC] 1. 模板介绍 首先,放上此模板链接: https://github.com/ygqygq2/charts/tree/master/mod-chart 此chart可当作POD单image的通用模板,只需要使用sed替换下chart名,并修改下README.md和NOTES.txt就可以了.下文,我通过复制此chart成example-chart来作示范说明. [[email protected] mod-chart]# tree . ├── Chart.yaml ├── READM

ASP.NET MVC4.0+ WebAPI+EasyUI+KnockOutJS快速开发框架 通用权限管理系统

在线演示地址:http://115.28.135.49:8099/ 1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性高.有利软件工程化管理等优点 3.采用WebAPI,客户端完全摆脱了代理和管道来直接进行交互 4.采用EasyUI前台UI界面插件,可轻松的打造出功能丰富并且美观的UI界面 5.采用Knockout,,提供了一个数据模型与用户UI界面进行关联的

ASP.NET通用权限框架 权限管理系统源码jquery 精美UI源码

开发工具 VS2010 .sql2005.2008等(在Sql server数据执行脚本即可)  VS2010 打开保证本地运行成功(数据库.源代码)  设计结构采用标准三层设计,是一套非常成熟的框架程序,可直接用于大型系统基础框架快速开发,及程序员学习. 1.菜单导航管理 2.操作按钮 3.角色管理 4.部门管理 5.用户管理(用户权限) 6.用户组管理(设置成员,用户组权限) 7.系统配置(动态配置系统参数) 8.附加属性(自定义属性) 9.系统日志(异常记录) 10.数据库备份/还原 11

手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 老规矩,爬之前首先感谢淘宝公布出这么多有价值的数据,才让我们这些爬虫们有东西可以搜集啊,不过淘宝就不用我来安利了 广大剁手党相信睡觉的时候都能把网址打出来吧. 工欲善其事,必先利其器,先上工具: 1.神箭手云爬虫,2.Chrome浏览器 3.Chrome的插件XpathHelper 不知道是干嘛的同学请移步第一课

手把手教你写电商爬虫-第五课 京东商品评论爬虫 一起来对付反爬虫

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染 四节课过去了,咱们在爬虫界也都算见过世面的人,现在再来一些什么ajax加载之类的小鱼小虾应该不在话下了,即使是淘宝这种大量的ajax,我们 祭上我们的核武器,也轻松应对了,这一课主要是来看看除了技术上的页面处理外,我们还会遇上更棘手的问题,就是反爬虫,当然现

ASP.NET MVC应用程序把文字写在图片上

原文:ASP.NET MVC应用程序把文字写在图片上 Insus.NET实现这篇<MVC把随机产生的字符串转换为图片>http://www.cnblogs.com/insus/p/3624235.html 之后,把字符串转换为图片,不如尝试,把字符串写在一张图片之上.好像有点添加水印的意思. 如果你了解此篇,实现水印的功能也自然懂得了. 参考下面方法,是核心的功能函数,传入文本,以及图片,返回的是Bitmap: 创建控件器,编写两个Action: 接下来,创建视图: 演示: ASP.NET M

ASP.NET通用权限验证组件实现

沙发(SF)通用权限验证组件 开篇 本篇介绍通用权限验证的实现代码思路,总共分为导入参数.解析XML.根据XML配置进行处理.返回结果. 代码架构图 1.   类介绍 1.SFWebPermission:实现IHttpModule接口,权限验证入口: 2.SFConfig:导入XML配置类: 3.SFPermission:解析XML配置进行权限验证: 4.SFAccessOper:数据库操作类: 5.SFPermissionSQL:XML节点实体类: 6.SFParameter:XML节点实体类