日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BootstrapBlazor实战 Menu 导航菜单使用(2)

發布時間:2024/3/13 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BootstrapBlazor实战 Menu 导航菜单使用(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接上篇: B08. BootstrapBlazor實戰 Menu 導航菜單使用(1)

實戰BootstrapBlazorMenu 導航菜單的使用, 以及整合Freesql orm快速制作菜單項數據庫后臺維護頁面

demo演示的是Sqlite驅動,FreeSql支持多種數據庫,MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/達夢/神通/人大金倉/翰高/華為GaussDB/MsAccess

3.項目模板

節省時間,直接使用 Bootstrap Blazor App 模板快速搭建項目

傳送門: https://www.blazor.zone/template

3.1. 安裝項目模板

dotnet new -i Bootstrap.Blazor.Templates

3.2. 創建工程

dotnet new bbapp

4. 本次演示使用工程名字 b08Menu ,命令如下

dotnet new bbapp -o b08Menu dotnet add b08Menu/BootstrapBlazorApp.Shared package FreeSql.Provider.Sqlite dotnet add b08Menu/BootstrapBlazorApp.Shared package Densen.FreeSql.Extensions.BootstrapBlazor dotnet sln add b08Menu/BootstrapBlazorApp.Server/BootstrapBlazorApp.Server.csproj dotnet sln add b08Menu/BootstrapBlazorApp.Shared/BootstrapBlazorApp.Shared.csproj dotnet sln add b08Menu/BootstrapBlazorApp.WebAssembly/BootstrapBlazorApp.WebAssembly.csproj

注:由于模板使用了共享庫,雙出Server和WebAssembly工程,我們這里只使用Server工程做演示.

5. 數據服務

添加FreeSql服務到 BootstrapBlazorApp.Server/Program.cs 在 builder.Services.AddBootstrapBlazor(); 之前加入

builder.Services.AddFreeSql(option => {//demo演示的是Sqlite驅動,FreeSql支持多種數據庫,MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/達夢/神通/人大金倉/翰高/華為GaussDB/MsAccessoption.UseConnectionString(FreeSql.DataType.Sqlite, "Data Source=test.db;") //也可以寫到配置文件中 #if DEBUG//開發環境:自動同步實體.UseAutoSyncStructure(true).UseNoneCommandParameter(true)//調試sql語句輸出.UseMonitorCommand(cmd => System.Console.WriteLine(cmd.CommandText)) #endif; });

傳送門: https://github.com/densen2014/Blazor100/wiki/B03.-BootstrapBlazor實戰-10分鐘編寫數據庫維護項目

6. Menu數據實體類

使用FreeSql的父子導航屬性處理樹形分類
傳送門: https://github.com/densen2014/Blazor100/wiki/B05.-BootstrapBlazor實戰-Tree樹形控件使用(2)

新建類文件 Data/WebPages.cs

/// <summary> /// 頁面 /// </summary> [AutoGenerateClass(Searchable = true, Filterable = true, Sortable = true)] public class WebPages {public WebPages() { }public WebPages(string PageName, string? Url = null, string? Icon = null, string? Code = "0", List<WebPages>? Childs = null){this.PageName = PageName;this.Url = Url ?? $"/{PageName}";this.Icon = Icon;this.Code = Code;this.Childs = Childs;}/// <summary>///代碼/// </summary>[DisplayName("代碼")][Column(IsPrimary = true)][AutoGenerateColumn(DefaultSort = true, DefaultSortOrder = SortOrder.Asc)]public string? Code { get; set; }/// <summary>///父級代碼/// </summary>[DisplayName("父級代碼")][Column]public string? ParentCode { get; set; }[Navigate(nameof(ParentCode))][AutoGenerateColumn(Ignore = true)]public WebPages? Parent { get; set; }[Navigate(nameof(ParentCode))][AutoGenerateColumn(Ignore = true)]public List<WebPages>? Childs { get; set; }/// <summary>///頁面名稱/// </summary>[Required(ErrorMessage = "{0}不能為空")][DisplayName("頁面名稱")]public string? PageName { get; set; }/// <summary>///Icon/// </summary>[DisplayName("Icon")][AutoGenerateColumn(Visible = false)]public string? Icon { get; set; }/// <summary>///Url/// </summary>[Required(ErrorMessage = "{0}不能為空")][DisplayName("Url")][AutoGenerateColumn(Visible = false)]public string? Url { get; set; } /// <summary>/// 隱藏/// </summary>[DisplayName ("隱藏")]public bool Hide { get; set; } }

7. 擴展工具

寫文章的時候這個方法已經pr進BootstrapBlazor庫,可能讀者們看到的時候已經內置次方法了.如果重復,自行跳過這步.

public static class Utility { /// <summary>/// 菜單樹狀數據層次化方法/// </summary>/// <param name="items">數據集合</param>/// <param name="parentId">父級節點</param>public static IEnumerable<MenuItem> CascadingMenu(this IEnumerable<MenuItem> items, string? parentId = null) => items.Where(i => i.ParentId == parentId).Select(i =>{i.Items = CascadingMenu(items, i.Id).ToList();return i;}); }

8. 菜單界面

找到BootstrapBlazorApp.Shared/Shared/MainLayout.razor文件,展開三角符號,打開MainLayout.razor.cs文件編輯

注入FreeSql

[Inject][NotNull]IFreeSql? fsql { get; set; }

Menus 初始化保存到數據庫

using Microsoft.AspNetCore.Components; using System.Diagnostics.CodeAnalysis; using BootstrapBlazorApp.Shared.Data;//private List<MenuItem>? Menus { get; set; } private List<MenuItem>? Menus { get; set; } = new List<MenuItem>();/// <summary>/// OnInitialized 方法/// </summary>protected override void OnInitialized(){base.OnInitialized();//Menus = GetIconSideMenuItems();}protected override void OnAfterRender(bool firstRender){if (firstRender){if (fsql.Select<WebPages>().Count() == 0){var pages = new List<WebPages>(){new WebPages("首頁","/","fa fa-home","001") ,new WebPages("數據","","fa fa-fw fa-database","002",new List<WebPages>(new[] {new WebPages("FetchData","fetchdata","fa fa-fw fa-database","002_001") ,new WebPages( "Counter","counter","fa fa-fw fa-check-square-o","002_002") ,new WebPages("后臺管理","admins","fa fa-gears","002_003") ,})) ,new WebPages("Table","table","fa fa-fw fa-table","004") ,new WebPages("花名冊","users","fa fa-fw fa-users","005")};var repo = fsql.GetRepository<WebPages>();//倉庫類repo.DbContextOptions.EnableAddOrUpdateNavigateList = true; //開啟一對多,多對多級聯保存功能repo.Insert(pages); }Menus = fsql.Select<WebPages>().OrderBy(a => a.Code).LeftJoin(d => d.ParentCode == d.Parent!.Code).ToList(a => new MenuItem(){Text = a.PageName,Id = a.Code,Url = a.Url,ParentId = a.ParentCode,Icon = a.Icon}).CascadingMenu().ToList();// 算法獲取屬性結構數據 .CascadingMenu().ToList()StateHasChanged();}}

到這一步,大家肯定迫不及待要運行一下了,來吧,少年,F5

9. 菜單管理界面

使用Densen.FreeSql.Extensions.BootstrapBlazor庫的數據庫服務直接表格編輯菜單數據庫表格.

先注銷模板工程自帶演示服務,BootstrapBlazorApp.Server/Program.cs 注銷 builder.Services.AddTableDemoDataService();

// 增加 Table 數據服務操作類 //builder.Services.AddTableDemoDataService();

新建BootstrapBlazorApp.Shared/Pages/Admins.razor文件

@page "/admins" @attribute [TabItemOption(Text = "菜單管理")] <PageTitle>菜單管理</PageTitle><div class="table-users scroll"><Table TItem="WebPages"IsFixedHeader="true"IsPagination="true"IsStriped="true"AutoGenerateColumns="true"ShowSearch="true"ShowToolbar="true"ShowExtendButtons="true"DoubleClickToEdit=trueShowColumnList=trueShowCardView=true></Table> </div>

來吧,少年,F5

是不是很有成就感,你怎么這么優秀呢? 哈哈哈.

10.添加菜單

刷新頁面

少年, 如期而來!

11.下一篇大概是: Layout 組件

項目源碼

Github | Gitee

關聯項目

FreeSql QQ群:4336577(已滿)、8578575(已滿)、52508226(在線)

BA & Blazor QQ群:795206915、675147445

知識共享許可協議

本作品采用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名AlexChow(包含鏈接: https://github.com/densen2014 ),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布。如有任何疑問,請與我聯系 。

AlexChow

今日頭條 | 博客園 | 知乎 | Gitee | GitHub

總結

以上是生活随笔為你收集整理的BootstrapBlazor实战 Menu 导航菜单使用(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩资源在线观看 | 久热免费| 日韩专区第一页 | 伊人久久视频 | 国产这里只有精品 | 久久精品综合 | 性欧美videos另类艳妇3d | 麻豆系列 | 精品国产av色一区二区深夜久久 | 亚洲欧美日韩色图 | 午夜国产一区 | 国产精品久久久久精 | 久久欧洲 | 国产一区二区在线播放 | 97超碰国产精品无码蜜芽 | 99精品小视频 | 成人免费在线观看av | 久久夜色av | 日本青青草 | 欧美色图影院 | www.九色| 激情中文网 | 亚洲精品一区二区三区在线观看 | 天天操人人爽 | 91小宝寻花一区二区三区 | 最新中文字幕在线视频 | 日韩视频在线观看视频 | 亚洲精品一区二区潘金莲 | 五级黄高潮片90分钟视频 | 男男大尺度 | 久草免费资源站 | 丰满少妇xoxoxo视频 | 欧美aaaaa| 99福利视频导航 | 免费在线观看国产精品 | 成年人毛片视频 | 国产成人精品无码免费看在线 | 欧美一区二区三区系列电影 | 老湿福利影院 | 婷婷社区五月天 | 丁香花高清在线观看完整动漫 | 91jk制服白丝超短裙大长腿 | 超能一家人电影免费喜剧在线观看 | 自拍99页 | 欧美交受高潮1 | 久久久青 | 99热免费| 亚洲免费专区 | 国产亚洲精品久久久久久青梅 | 91人人草 | 一区二区三区视频在线观看 | 欧美午夜精品久久久久久孕妇 | 亚洲天堂一区二区在线 | 久久青青热 | 日韩和一区二区 | 天天色天天干天天色 | 亚洲人成色777777精品音频 | www.一级片| 国产又粗又猛又爽又黄的视频在线观看动漫 | 欧美黑人一区二区三区 | 青娱乐av | 黄色变态网站 | 国产精品视频一区二区三 | 日韩成人免费在线观看 | 少妇做爰免费视频播放 | 国产欧美综合视频 | 亚洲美女综合网 | 高清一区二区三区四区五区 | 国产精品三级av | 精品国产乱码久久久久久108 | 伊人久久大香 | 中文字幕日韩视频 | 国产精品一区免费观看 | 色综合久久久久综合体桃花网 | 牛牛超碰| 中文精品一区 | 11一12免费毛片 | 青青操视频在线观看 | 北条麻妃一区二区三区四区五区 | 国内自拍小视频 | 亚洲国产日韩一区二区 | 成人精品视频一区二区 | 青青免费视频 | 偷拍夫妻性生活 | 枫可怜av| 一级欧美一级日韩 | 亚洲毛片在线观看 | 黄色国产免费 | 影音先锋亚洲天堂 | 超碰97在线人人 | 亚洲精品国产精品乱码视色 | 性欧美free| 欧美成人三级 | 第一福利在线视频 | 久久综合久久综合久久综合 | 欧美在线你懂的 | 西西4444www大胆无码 | 呦呦视频在线观看 | 国产精品极品 |