`
shuai1234
  • 浏览: 977951 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理

 
阅读更多

最近一直很多事情,博客停下来好久没写了,整理下思路,把最近研究的基于Metronic的Bootstrap开发框架进行经验的总结出来和大家分享下,同时也记录自己对Bootstrap开发的学习研究的点点滴滴,希望在开一个《基于MVC4+EasyUI的Web开发框架经验总结》的系列文章,逐步介绍这个响应式框架的点点滴滴。

Bootstrap是一个前端的技术框架,很多平台都可以采用,JAVA/PHP/.NET都可以用来做前端界面,整合JQuery可以实现非常丰富的界面效果,目前也有很多Bootstrap的插件能够提供给大家使用,但是在国内很多基于Bootstrap的介绍很多还是停留在教学的基础上,介绍Bootstrap的各种基础知识和简单的使用;本文希望以基于C#的MVC实际项目的基础上,对Bootstrap开发框架进行全面的案例介绍,以实际项目的代码和效果截图进行讲解,力求详尽、直观为大家介绍这方面的经验和心得。

1、基于Metronic的Bootstrap开发框架总览

Metronic是一个国外的基于HTML、JS等技术的Bootstrap开发框架整合,整合了很多Bootstrap的前端技术和插件的使用,是一个非常不错的技术框架。本文以这个为基础,结合我对MVC的Web框架的研究,整合了基于MVC的Bootstrap开发框架,使之能够符合实际项目的结构需要的实际项目。

以下是我整体性项目的总的效果图。

启动菜单区的内容,动态从数据库里面获取,系统顶栏放置一些信息展示,以及提供用户对个人数据快速处理,如查看个人信息、注销、锁屏等操作,内容区域则主要是可视化展示的数据,可以通过树列表控件、表格控件进行展示,一般数据还有增删改查、以及分页的需要,因此需要整合各种功能的处理。另外,用户的数据,除了查询展示外,还需要有导入、导出等相关操作,这些是常规性的数据处理功能。确定好这些规则和界面效果后,我们可以通过代码生成工具进行生成,快速生成这些Web项目的界面效果了。

2、Bootstrap开发框架菜单展示

整个框架涉及了很多内容,包括常规Bootstrap的各种CSS特性的使用,以及菜单栏、Bootstrap图标管理、系统顶栏、树形控件JSTree、Portlet容器、Modal对话框、Tab控件、、下拉列表Select2、复选框iCheck、多文本编辑控件summernote、文件及图片上传展示fileinput、提示控件bootstrap-toastr和sweetalert、数值调整控件touchspin、视频播放展示控件video-player等等,这些特性在整体性的解决方案里面都有设计,集合这些优秀的插件,能够为我们的框架提供更强大的功能和丰富的界面体验。

本节继续回到框架的开始部分,菜单处理展示。一般为了管理方便,菜单分为三级,选中的菜单和别的菜单样式有所区分,菜单可以折叠最小化,效果如下所示。

   

在Bootstrap,构建菜单是一个相对比较容易的事情,主要是利用了UL和LI,通过样式的处理,就可以实现了菜单的布局设置了,代码如下所示。

复制代码
                <ul class="page-sidebar-menu page-sidebar-menu-hover-submenu " data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200">
                    <li class="start" id="1">
                        <a href="/Home/index">
                            <i class="icon-home"></i>
                            <span class="title">首页</span>
                            <span class="selected"></span>
                            <span class="arrow open"></span>
                        </a>
                    </li>
                    <li id="2">
                        <a href="javascript:;">
                            <i class="icon-basket"></i>
                            <span class="title">行业动态</span>
                            <span class="selected"></span>
                            <span class="arrow open"></span>
                        </a>
                        <ul class="sub-menu">
                            <li class="heading" style="font-size:14px;color:yellow">
                                <i class="icon-home"></i>
                                行业动态
                            </li>
                            <li>
                                <a href="#">
                                    <i class="icon-home"></i>
                                    <span class="badge badge-danger">4</span>
                                    政策法规
                                </a>
                            </li>
                            <li>
                                <a href="#">
                                    <i class="icon-basket"></i>
                                    <span class="badge badge-warning">4</span>
                                    通知公告
                                </a>
                            </li>
                            <li>
                                <a href="#">
                                    <i class="icon-tag"></i>
                                    <span class="badge badge-success">4</span>
                                    动态信息
                                </a>
                            </li>
                        </ul>
                    </li>
                </ul>
复制代码

但是,我们一般的菜单是动态变化的,也就是需要从数据库里面获取,并设置到前端显示,这样我们就需要在MVC的控制器里面,输出菜单的内容,然后绑定到前端的界面上,实现菜单数据的动态化,同时这也是权限控制的基础处理。

在基类里面,我们可以在用户登陆后,获取菜单的数据放到ViewBag对象里面。

具体代码如下所示,先判断用户是否登陆,如果登陆,则获取用户的菜单数据,存在ViewBag里面待用。

复制代码
        /// <summary>
        /// 重写基类在Action执行之前的处理
        /// </summary>
        /// <param name="filterContext">重写方法的参数</param>
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

            //得到用户登录的信息
            CurrentUser = Session["UserInfo"] as UserInfo;
            if (CurrentUser == null)
            {
                Response.Redirect("/Login/Index");//如果用户为空跳转到登录界面
            }
            else
            {
                //设置授权属性,然后赋值给ViewBag保存
                ConvertAuthorizedInfo();
                ViewBag.AuthorizeKey = AuthorizeKey;

                //登录信息统一设置
                ViewBag.FullName = CurrentUser.FullName;
                ViewBag.Name = CurrentUser.Name;

                ViewBag.MenuString = GetMenuString();
                //ViewBag.MenuString = GetMenuStringCache(); //使用缓存,隔一段时间更新
            }
        }
复制代码

其中,GetMenuString函数就是对菜单的组装处理。数据库中菜单的信息是一个树形结构,如下所示。

我们可以根据数据库的菜单信息,构建一部分界面用到的HTML代码。

复制代码
            #region 定义的格式模板
            // javascript:;
            // {0}?tid={1}
            var firstTemplate = @"
            <li id='{3}'>
                <a href='{0}'>
                    <i class='{1}'></i>
                    <span class='title'>{2}</span>
                    <span class='selected'></span>
                    <span class='arrow open'></span>
                </a>";

            var secondTemplate = @"
                <li class='heading' style='font-size:14px;color:yellow'>
                    <i class='{0}'></i>
                    {1}
                </li>";

            var thirdTemplate = @"
                <li id='{3}'>
                    <a href='{0}'>
                        <i class='{1}'></i>
                        {2}
                    </a>
                </li>";
            var firstTemplateEnd = "</li>";
            var secondTemplateStart = "<ul class='sub-menu'>";
            var secondTemplateEnd = "</ul>"; 
            #endregion
复制代码

例如三级菜单就可以通过代码进行生成。

复制代码
                        //三级
                        icon = subNodeInfo.WebIcon;
                        //tid 为顶级分类id,sid 为第三级菜单id
                        tmpUrl = string.Format("{0}{1}tid={2}&sid={3}", subNodeInfo.Url, GetUrlJoiner(subNodeInfo.Url), info.ID, subNodeInfo.ID);
                        url = (!string.IsNullOrEmpty(subNodeInfo.Url) && subNodeInfo.Url.Trim() != "#") ? tmpUrl : "javascript:;";
                        sb = sb.AppendFormat(thirdTemplate, url, icon, subNodeInfo.Name, subNodeInfo.ID);
复制代码

 

当然,如果想提高并发量,可以减少菜单的频繁检索,把这部分数据放到MemeryCache里面,如下处理即可。

复制代码
        public string GetMenuStringCache()
        {
            string itemValue = MemoryCacheHelper.GetCacheItem<string>("GetMenuStringCache", delegate()
                {
                    return GetMenuString();
                },
                null, DateTime.Now.AddMinutes(5) //5分钟以后过期,重新获取
            );
            return itemValue;
        }
复制代码

3、布局页面的使用

同时,我们为了提高页面的重用,一般情况下,是把每个页面相同部分的内容抽离出来,放到总的布局页面上,这样处理内容区域外,其他部分全部是继承自布局视图页面的内容了,我们的动态菜单部分,也是在布局视图里面的一部分内容。

上图的_Layout.cshtml就是基于C#的MVC总的布局视图页面。这样,我们在这个页面里面,设定了菜单的展示内容,以及留出主页面内容的部分,以及脚本的部分展示,就可以了。

菜单的展示代码如下所示:

布局页面留出的页面展示Section如下所示。

由于Bootstrap一般把JS文件放到最后加载,因此我们在布局页面保留部分必备的Jquery等脚本外,还需要把脚本部分内容放到页面底部进行加载,并且我们脚本加载可以利用MVC的Bundles技术进行压缩整合处理。关于这方面技术,可以参考我之前的文章介绍《基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码》。

这样,我们在各个子页面的视图里面,引入布局视图页面后,只需要编写个性化展示内容的部分即可,具体代码如下所示。

 

然后在页面底部,包含所需部分的脚本代码即可,这样在页面生成后,就会依据布局页面设置好的顺序块,进行合理的展示,并且是把所有部分内容进行整合了。

4、页面编辑工具Sublime Text的使用

我前面截图,很多是VS环境里面的,不过一般我们编辑视图页面的时候,都是采用Sublime Text这个强大的编辑工具的,丰富的插件、智能语法提示等,会让你用了之后爱不释手,是编辑视图页面非常快速的利器,强烈推荐使用。

VS一般我们用来做文件管理,以及编译等处理就可以了。

 

如果有兴趣,可以继续参考系列文章:

基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理

基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用

基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用

基于Metronic的Bootstrap开发框架经验总结(4)--Bootstrap图标的提取和利用 

基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用

基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化

基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理

基于Metronic的Bootstrap开发框架经验总结(8)--框架功能总体界面介绍

基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作

 

主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
专注于Winform开发框架Web开发框架、WCF开发框架、微信门户开发框架的研究及应用。
  转载请注明出处:
撰写人:伍华聪  http://www.iqidi.com 
    
分享到:
评论

相关推荐

    基于Metronic的Bootstrap开发框架经验总结.docx

    基于Metronic的...本文对基于Metronic的Bootstrap开发框架进行了经验总结,涵盖了框架总览、菜单模块的处理、Bootstrap的前端技术和插件的使用等方面的内容,为读者提供了一个完整的Bootstrap开发框架解决方案。

    基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理

    《基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理》 Bootstrap,作为一款广受欢迎的前端开发框架,以其简洁、直观和响应式的设计理念,为开发者提供了丰富的组件和样式,适用于多种平台,...

    metronic.bootstrap 框架demo

    Metronic是基于bootstrap 3.3.5 框架开发的一个响应式的管理后台加前端主题模板。Metronic可以用于各种形式的网站程序,如管理员后台,管理仪表,电子商务后台,CMS,CRM,SAAS,公司网站,电商网站,商务网站,信息...

    bootstrap-METRONIC 4

    Bootstrap-METRONIC 4 是一个基于流行的前端开发框架 Bootstrap 的高级主题和模板集合,专为构建现代响应式和交互式网站而设计。这个框架以其灵活性、可定制性和丰富的组件库而闻名,使得开发者能够快速地搭建专业...

    最新metronic+bootstrap后台框架,绝对可用

    总的来说,这个最新的Metronic+Bootstrap后台框架是开发高质量后台应用的理想选择。它将Bootstrap的简洁和Metronic的强大结合在一起,提供了一套全面的解决方案,让开发者可以专注于业务逻辑,而无需花费大量时间在...

    基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用

    在基于BootStrap Metronic开发框架的工作中,图标是一个重要的设计元素,特别是在构建用户界面时,图标能够增强视觉效果和用户体验。本篇文章主要探讨如何从Bootstrap的图标库中提取图标信息,以便将其存储到数据库...

    基于bootstrap3的Metronic模板

    基于bootstrap3的Metronic模板,新版本,比较全面! 和资源库中10分的资源一样,我还加入了基于2.3的版本。 解压分成基于bootstrap3版本和基于bootstrap2.3的2个版本。

    Bootstrap开发框架-界面代码分析_Bootstrap开发框架_bootstrap_collect5g1_

    Bootstrap开发框架本文档主要介绍《基于 Metronic 的 Bootstrap 开发框架》 的基础上,通过分析各个模块相关的代码、各种常见组件的使用、特殊应用场景的处理, 熟悉掌握框架里面相关代码和组件的使用,以便能够更...

    metronic bootstrap 扁平化响应式模板

    Metronic Bootstrap 是一款深受开发者喜爱的前端开发模板,它基于流行的Bootstrap框架构建,融入了扁平化设计风格,并且具有强大的响应式特性。这款模板以其丰富的功能、优雅的界面和易用性,成为了Web应用开发的...

    metronic v6.15_最新编译版本-demo9.rar

    该版本基于Bootstrap,一个广泛使用的前端开发框架,为构建响应式和移动优先的Web应用提供了便利。Metronic不仅适用于企业级的后台管理系统,还能够灵活地改造成OA(办公自动化)系统、CRM(客户关系管理)系统以及...

    Metronic-3.6-Bootstrap-3.3.1

    1. **栅格系统**:Bootstrap的网格系统基于12列布局,允许灵活地创建响应式和自适应的页面布局。 2. **基础样式**:包括字体、颜色、链接、按钮、表格、表单等,提供了一套统一的视觉样式,使网页看起来更加专业和...

    metronic v6.15_最新编译版本-demo7.rar

    Metronic v6.15-Demo7是一款基于Bootstrap的顶级管理系统框架,其最新编译版本提供了强大而全面的功能,适用于各种管理应用程序的构建。这个框架以其异常强大的性能和灵活性,为开发者提供了构建后台管理系统、OA...

    metronic v6.15_最新编译版本-demo6.rar

    Metronic基于Bootstrap框架,这使得它具备响应式设计的特性,能够自适应不同屏幕尺寸,无论是桌面端还是移动端,都能提供一致的用户体验。Bootstrap的强大组件库为Metronic提供了丰富的UI元素,如导航栏、模态框、...

    metronic.bootstrap

    "Metronic Bootstrap" 是一套深度集成Bootstrap框架的后台管理模板,专为开发高效、美观且响应式的Web应用程序而设计。Bootstrap作为最流行的前端开发框架,以其简洁、灵活和强大的功能深受开发者喜爱。...

    metronic v6.15_最新编译版本-demo5.rar

    Metronic 框架基于Bootstrap,一个广为人知且深受喜爱的前端开发工具包,它以简洁的代码、丰富的组件和跨设备兼容性著称。Bootstrap的灵活性与Metronic的深度定制能力相结合,使得开发高效、美观且适应性强的管理...

    Metronic框架(Bootstrap实现的整套前端框架)

    Metronic框架是一款基于Bootstrap构建的高级前端开发框架,旨在提供一套完整的、功能丰富的解决方案,用于快速开发响应式、多设备兼容的Web应用。它以Bootstrap的强大功能为基础,进一步扩展和增强了其功能,使得...

    metronic__bootstrap后台模板

    这款模板基于Bootstrap 3.0.3,一个由Twitter开发并广泛使用的响应式网页设计框架,旨在提供跨设备和屏幕尺寸的一致用户体验。Metronic本身是一个高度可定制、性能优良且包含大量组件和插件的解决方案,它极大地简化...

Global site tag (gtag.js) - Google Analytics