Bootstrap基被Metronic的Bootstrap开发框架的经验总结(11) – 页面菜单的有的意味着法

于健康的后台管理体系或前端界面被,一般都来一个导航菜单提供给用户,方便选择所要的情节。基于Metronic的Bootstrap开发框架,是整合了Metroinc样式,以及Boostrap组件模块的情节,因此菜单的功能当然也是跟Bootstrap一脉相承的。基于经常采取的几乎栽菜单样式,本文进行了连带的牵线与展示。

1、菜单显示的老三种植办法

菜单的亮可以做成各种各样的意义,本文就是对的介绍其中的老三种植,两种左侧竖放的食谱,一栽是程度横放的菜单。

样式1:

菜单收缩后界面如下所示。

样式2:

 

样式3:

水平样式的菜谱如下所示:

 

2、几栽布局之集体措施

鉴于这几乎栽布局方式,它们的框架布局页面(也不怕是Layout页面)内容有所不同,一般情况下我们得以拿它们分别定义为同栽Layout页面,这样在实质上使用的当儿包含它即可。

自根据上面几乎种植样式,分别定义了几乎独例外的Layout页面,如下所示

貌似景象下,我们别一个视图页面,会提示我们选择不同的视图布局页面的,确认后会当页面顶部应用对应之Layout页面。

比方我们要动态指定页面的布局内容,可以当方下一个变量来拍卖,如下代码所示。

@{
    Layout = ConfigData.ViewLayoutFile;// "~/Views/Shared/_Layout.cshtml"; 
    ViewBag.Title = "角色信息";
}

实际,我们一般的页面布局确定好后,就相对比较少变更的,所以为了不打破这个变化页面的布局内容,我们得以管前处理好之Layout1/2/3等这些复制到Layout页面里面进行拍卖即可。

但页面内或者要依据不同布局页面,指定不同的资源的。

咱俩抬高样式的资源如下所示。

            //开始全局必需样式引用
            css_metronic.Include("~/Content/metronic/assets/global/plugins/font-awesome/css/font-awesome.min.css",
               "~/Content/metronic/assets/global/plugins/simple-line-icons/simple-line-icons.min.css",
               "~/Content/metronic/assets/global/plugins/bootstrap/css/bootstrap.min.css",
               "~/Content/metronic/assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css",

              ..........................

               //主题全局样式
               "~/Content/metronic/assets/global/css/components-rounded.css",
               "~/Content/metronic/assets/global/css/plugins.min.css",
                //主题布局样式
               "~/Content/metronic/assets/layouts/" + Layout + "/css/layout.css",
               "~/Content/metronic/assets/layouts/" + Layout + "/css/themes/default.min.css",
               "~/Content/metronic/assets/layouts/" + Layout + "/css/custom.min.css"

               );

方红色的Layout是咱根据不同布局页面获得的一个变量,从而能使不同布局页面的样式与剧本顺利引入的。

    /// <summary>
    /// 系统定义的一些常用变量
    /// </summary>
    public class ConfigData
    {
        /// <summary>
        /// Web开发框架所属的系统类型定义
        /// </summary>
        public const string SystemType = "WareMis";

        /// <summary>
        /// 配置视图的样式布局
        /// </summary>
        public static LayoutType Layout = LayoutType.Layout2;
    }

    /// <summary>
    /// 布局样式枚举
    /// </summary>
    public enum LayoutType
    {
        Layout,
        Layout2,
        Layout3
    }

 

3、菜单的动态变化

以贯彻菜单动态的变更,我们得了解当下几乎种植方法的菜谱结构,然后我们根据其的风味开展数据结构的转即可。

首先次之栽布局方式的菜单结构数据是平的,它们的内容如下所示。

                <ul class="page-sidebar-menu page-header-fixed " data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200">
                    <li class="nav-item start" id="1">
                        <a href="/Home/index?tid=1" class="nav-link nav-toggle">
                            <i class="icon-home"></i>
                            首页


                        </a>
                    </li>
                    @Html.Raw(@ViewBag.MenuString)
                  </ul>

俺们好透过后台生成:@Html.Raw(@ViewBag.MenuString)

接下来输出的界面里即可。

咱来看望前面片栽菜单的组织,简单的布局如下所示

                    <li class="nav-item start" id="1">
                        <a href="/Home/index?tid=1" class="nav-link nav-toggle">
                            <i class="icon-home"></i>
                            首页


                        </a>
                    </li>

比方有子菜单的,那么零星层菜单的组织如下所示。

            <li class="nav-item " id="3">
                <a href="javascript:;" class="nav-link nav-toggle">
                    <i class="icon-rocket"></i>
                    客户管理

                </a>
                <ul class="sub-menu">
                    <li class="nav-item " id="31">
                        <a href="second?tid=3&sid=31">
                            <i class="glyphicon glyphicon-th-list"></i>
                            客户管理
                        </a>
                    </li>
                    <li class="nav-item  " id="32">
                        <a href="second?tid=3&sid=32">
                            <i class="icon-basket"></i>
                            new
                            客户联系人
                        </a>
                    </li>
                </ul>
            </li>

如是三级菜单的结构,如下所示:

          <li class="nav-item active open" id="2">
                <a href="javascript:;" class="nav-link nav-toggle">
                    <i class="icon-basket"></i>
                    行业动态


                </a>
                <ul class="sub-menu">
                    <li class="nav-item  active open" id="21">
                        <a href="javascript:;" class="nav-link nav-toggle">
                            <i class="icon-home"></i>
                            行业动态


                        </a>
                        <ul class="sub-menu">
                            <li class="nav-item  active open" id="211">
                                <a href="second?tid=2&sid=21&ssid=211">
                                    <i class="icon-home"></i>
                                    4
                                    政策法规
                                </a>
                            </li>
                            <li class="nav-item " id="212">
                                <a href="second?tid=2&sid=21&ssid=212">
                                    <i class="icon-basket"></i>
                                    4
                                    通知公告
                                </a>
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>

冲这些内容,我们以后台动态输出菜单结构即可。

比如我们当基类控制器里面,通过判断视图的处理,实现菜单内容的出口。

        /// <summary>
        /// 重载视图展示界面,方便放置一些常规的ViewBag变量。
        /// 如果放在OnActionExecuting,则会导致任何请求都会执行一次,从而导致多次执行,降低响应效率
        /// </summary>
        protected override ViewResult View(string viewName, string masterName, object model)
        {
            //登录信息统一设置
            if (CurrentUser != null)
            {
                ViewBag.FullName = CurrentUser.FullName;
                ViewBag.Name = CurrentUser.Name;

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

            return base.View(viewName, masterName, model);
        }

为增进菜单的应处理,避免频繁递归耗时,我们得将大成好的菜单内容,放到缓存中,通过键值实现拍卖。

        /// <summary>
        /// 使用分布式缓存实现菜单数据的缓存处理
        /// </summary>
        /// <returns></returns>
        public string GetMenuStringCache()
        {
            string itemValue = MemoryCacheHelper.GetCacheItem<string>("GetMenuStringCache_" + CurrentUser.ID , delegate()
                {
                    return GetMenuString();
                },
                null, DateTime.Now.AddMinutes(5) //5分钟以后过期,重新获取
            );
            return itemValue;
        }

假定对水平方向的菜单处理,和眼前两者有所不同。

若是二级菜单数据展示如下所示。

                        <li class="menu-dropdown classic-menu-dropdown ">
                            <a href="index.html" class="nav-link  ">
                                <i class="icon-bar-chart"></i> Default

                            </a>
                        </li>
                        <li class="menu-dropdown classic-menu-dropdown active">
                            <a href="javascript:;" class="nav-link nav-toggle ">
                                <i class="icon-basket"></i> Dashboard

                            </a>
                            <ul class="dropdown-menu pull-left">
                                <li class=" active">
                                    <a href="index.html" class="nav-link  active">
                                        <i class="icon-bar-chart"></i>Dashboard

                                    </a>
                                </li>
                            </ul>
                        </li>

三级菜单显示的数目如下所示。

                        <li class="menu-dropdown classic-menu-dropdown ">
                            <a href="javascript:;" class="nav-link nav-toggle ">
                                <i class="icon-briefcase"></i> Pages

                            </a>
                            <ul class="dropdown-menu pull-left">
                                <li class="dropdown-submenu ">
                                    <a href="javascript:;" class="nav-link nav-toggle ">
                                        <i class="icon-basket"></i> eCommerce

                                    </a>
                                    <ul class="dropdown-menu">
                                        <li class=" ">
                                            <a href="ecommerce_index.html" class="nav-link ">
                                                <i class="icon-home"></i> Dashboard
                                            </a>
                                        </li>
                                        <li class=" ">
                                            <a href="ecommerce_orders.html" class="nav-link ">
                                                <i class="icon-basket"></i> Orders
                                            </a>
                                        </li>
                                    </ul>
                                </li>

                                <li class="dropdown-submenu">
                                    <a href="javascript:;" class="nav-link nav-toggle">
                                        <i class="icon-notebook"></i> Login

                                    </a>
                                    <ul class="dropdown-menu pull-left">
                                        <li class="">
                                            <a href="page_user_login_1.html" class="nav-link " target="_blank"> Login Page 1 </a>
                                        </li>
                                        <li class="">
                                            <a href="page_user_login_2.html" class="nav-link " target="_blank"> Login Page 2 </a>
                                        </li>
                                    </ul>
                                </li>
                            </ul>
                        </li>

俺们所用举行的虽是管我们数据库里的菜系数据,动态构建这种递进式的数据结构即可。

 

苟谢兴趣Bootstrap开发框架系列,可以参见学习下的文章,感谢您的翻阅。

根据Metronic的Bootstrap开发框架经验总结(10)–优化Bootstrap图标管理

于MVC控制器里面用dynamic和ExpandoObject,实现多少转义的出口 

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

 

冲Metronic的Bootstrap开发框架经验总结(8)–框架功能完全界面介绍  

 

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

 

根据Metronic的Bootstrap开发框架经验总结(6)–对话框及提示框的处理以及优化 

 

冲Metronic的Bootstrap开发框架经验总结(5)–Bootstrap文件上传插件File
Input的动

 

基于Metronic的Bootstrap开发框架经验总结(4)–Bootstrap图标的领及使用 

 

据悉Metronic的Bootstrap开发框架经验总结(3)–下拉列表Select2插件的采用 

 

基于Metronic的Bootstrap开发框架经验总结(2)–列表分页处理与插件JSTree的运 

 

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

相关文章