基於Metronic的Bootstrap開發框架經驗總結(11)--頁面菜單的幾種呈現方式

来源:http://www.cnblogs.com/wuhuacong/archive/2016/07/15/5672921.html
-Advertisement-
Play Games

在常規的後臺管理系統或者前端界面中,一般都有一個導航菜單提供給用戶,方便選擇所需的內容。基於Metronic的Bootstrap開發框架,是整合了Metroinc樣式,以及Boostrap組件模塊的內容,因此菜單的效果自然也是和Bootstrap一脈相承的。基於經常使用的幾種菜單樣式,本文進行了相關... ...


在常規的後臺管理系統或者前端界面中,一般都有一個導航菜單提供給用戶,方便選擇所需的內容。基於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>
                            <span class="title">首頁</span>
                            <span class="selected"></span>
                            <span class="arrow open"></span>
                        </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>
                            <span class="title">首頁</span>
                            <span class="selected"></span>
                            <span class="arrow open"></span>
                        </a>
                    </li>

如果有子菜單的,那麼兩級菜單的結構如下所示。

            <li class="nav-item " id="3">
                <a href="javascript:;" class="nav-link nav-toggle">
                    <i class="icon-rocket"></i>
                    <span class="title">客戶管理</span>
                    <span class="arrow"></span>
                </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>
                            <span class="title">客戶管理</span>
                        </a>
                    </li>
                    <li class="nav-item  " id="32">
                        <a href="second?tid=3&sid=32">
                            <i class="icon-basket"></i>
                            <span class="badge badge-roundless badge-danger">new</span>
                            <span class="title">客戶聯繫人</span>
                        </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>
                    <span class="title">行業動態</span>
                    <span class="selected"></span>
                    <span class="arrow open"></span>
                </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>
                            <span class="title">行業動態</span>
                            <span class="arrow"></span>
                            <span class="selected"></span>
                        </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>
                                    <span class="badge badge-danger">4</span>
                                    <span class="title">政策法規</span>
                                </a>
                            </li>
                            <li class="nav-item " id="212">
                                <a href="second?tid=2&sid=21&ssid=212">
                                    <i class="icon-basket"></i>
                                    <span class="badge badge-warning">4</span>
                                    <span class="title">通知公告</span>
                                </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
                                <span class="arrow"></span>
                            </a>
                        </li>
                        <li class="menu-dropdown classic-menu-dropdown active">
                            <a href="javascript:;" class="nav-link nav-toggle ">
                                <i class="icon-basket"></i> Dashboard
                                <span class="arrow"></span>
                            </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
                                        <span class="arrow"></span>
                                    </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
                                <span class="arrow"></span>
                            </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
                                        <span class="arrow"></span>
                                    </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
                                        <span class="arrow"></span>
                                    </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)-框架總覽及菜單模塊的處理 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言,知道自己騰訊雲伺服器安全組配置併在安全組裡開放了所有埠的用戶可以粗略的看看下邊的內容,否則就仔細看看吧。 因為有學習及業務需要,我要在騰訊雲上安裝了CentOS7.2版本的伺服器上安裝MySQL 提示,不知道怎麼在CentOS7.2上安裝MySQL的可以訪問以下網站,有詳細的步驟: http ...
  • 今天寫模糊查詢的時候,按照時間排序併進行分頁時,在mybatis的映射文件中有這樣一條sql語句 如果先排序後分頁的話就能得到想要的結果,但是反之 這樣的話就會報錯。SQL的執行順序是from where select。那我可不可以認為,在相同優先順序的where條件下誰在前面誰會優先執行,而orde ...
  • 聲明:本系列為原創,分享本人現用框架,未經本人同意,禁止轉載!http://yuangang.cnblogs.com 希望大家好好一步一步做,所有的技術和項目,都毫無保留的提供,希望大家能自己跟著做一套,還有,請大家放心,只要大家喜歡,有人需要,絕對不會爛尾,我會堅持寫完~ 如果你感覺文章有幫助,點 ...
  • 這個異常是我第二次遇到! 從網上查找資料後知道了是由於資料庫鏈接字元串是遠程鏈接造成的,去掉鏈接伺服器地址就行了,換成普通的鏈接字元串就可以了 ...
  • 網上C#導出Excel的方法有很多。但用來用去感覺不夠自動化。於是花了點時間,利用特性做了個比較通用的導出方法。只需要根據實體類,自動導出想要的數據 1.在NuGet上安裝Aspose.Cells或者用微軟自帶類庫也可以 2.需要導出的數據的實例類: using System.ComponentMo ...
  • Lambda表達式:是一個匿名委托,是一種高效的類似於函數式編程的表達式,也是LINQ的基礎。 Lambda表達式可以有多個參數、一個參數,或者沒有參數。其參數類型可以隱式或者顯式。示例代碼如下: 例: Func<string,int>strLength=delegate(stringstr){re ...
  • 創建團隊項目集合 tfs server管理控制台\團隊項目集合頁面。選擇'創建集合'鏈接,按嚮導即可創建項目集合。 創建團隊項目 創建好團隊項目集合後,就要開始創建團隊項目了。 進入vs,連接上tfs伺服器後,從下麵菜單選擇'新建團隊項目...' 然後,輸入團隊項目名稱,過程模板選擇Agile,源代... ...
  • 這個系列結束了,就兩篇,本來想詳細寫寫html標簽和javascript的編寫的,著實自己太菜也寫不出來,大家湊合看看! 這篇主要寫html頁面基本格式與jquery調用webapi獲取數據的並展示在html頁面里方法! ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...