鐨勫唴瀹規(guī)瘮杈冪殑澶氾紝鎵€浠ヨ繖涓€绔犺妭灝嗕細(xì)鍒嗕負(fù)涓夌瘒鏂囩珷鏉ヨ繘琛岃瑙o紝澶у鍙">
鐢變簬 涓嶇啛鎮(zhèn)塀lazor鐨勫悓瀛﹀彲浠ュ厛鐪嬭繖綃囨枃绔犲ぇ姒備簡瑙d竴涓嬨€?/p> 鍏ㄩ潰鐨凙SP.NET Core Blazor綆€浠嬪拰蹇€熷叆闂?/span> BootstrapBlazor鏄竴濂楀熀浜?Bootstrap 鍜?Blazor 鐨勪紒涓氱駭緇勪歡搴擄紝鍙互璁や負(fù)鏄?Bootstrap 欏圭洰鐨?Blazor 鐗堝疄鐜般€傚熀浜?Bootstrap 鏍峰紡搴撶簿蹇冩墦閫狅紝騫朵笖棰濆澧炲姞浜?100 澶氱甯哥敤鐨勭粍浠訛紝涓烘?zhèn)ㄥ揩閫熷紑鍙戦」鐩甫鏉ラ潪涓€鑸殑鎰熻錛堝枩嬈ootstrap椋庢牸鐨勫悓瀛︽帹鑽愪嬌鐢級(jí)銆?/p> 綆$悊Nuget紼嬪簭鍖?>鎼滅儲(chǔ) 鍦?code style='font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(0, 150, 136);'>Program.cs絎竷澶〣lazor鍓嶇欏甸潰緙栧啓鍜屾帴鍙e鎺?/code>鐨勫唴瀹規(guī)瘮杈冪殑澶氾紝鎵€浠ヨ繖涓€绔犺妭灝嗕細(xì)鍒嗕負(fù)涓夌瘒鏂囩珷鏉ヨ繘琛岃瑙o紝澶у鍙互璁や負(fù)鍒嗕負(fù)鏃┿€佷腑銆佹櫄鏉ヨ繘琛岄樁孌墊€у涔?fàn)锛屼粠鑰屾彁楂樺涔?fàn)鏁堢巼馃榿銆?/p>
涓皢 BootstrapBlazor 搴撴坊鍔犲埌 ASP.NET Core 欏圭洰涓殑渚濊禆鍏崇郴娉ㄥ叆瀹瑰櫒涓€?/p>涓冨ぉ.NET 8 鎿嶄綔 SQLite 鍏ラ棬鍒板疄鎴樿緇嗘暀紼?/h2>
EasySQLite 欏圭洰婧愮爜鍦板潃
Blazor綆€浠嬪拰蹇€熷叆闂?/h2>
BootstrapBlazor浠嬬粛
BootstrapBlazor綾誨簱瀹夎
BootstrapBlazor
榪涜瀹夎銆?/p>BootstrapBlazor搴撴敞鍏ュ鍣?/h2>
鎵撳紑_Imports.razor鏂囦歡錛屽鍏ootstrapBlazor緇勪歡搴撳懡鍚嶇┖闂達(dá)細(xì)@using BootstrapBlazor.Components銆?/p>
@inherits LayoutComponentBase
<Layout SideWidth="0" IsPage="true" ShowGotoTop="true" ShowCollapseBar="true"
IsFullSide="@IsFullSide" IsFixedHeader="@IsFixedHeader" IsFixedFooter="@IsFixedFooter" ShowFooter="@ShowFooter"
TabDefaultUrl="/"
Menus="@Menus" UseTabSet="@UseTabSet" AdditionalAssemblies="new[] { GetType().Assembly }" class="@Theme">
<Header>
<span class="ms-3 flex-sm-fill d-none d-sm-block">Bootstrap of Blazor</span>
<div class="flex-fill d-sm-none">
</div>
<div class="layout-drawer" @onclick="@(e=> IsOpen=!IsOpen)"><i class="fa fa-gears"></i></div>
</Header>
<Side>
<div class="layout-banner">
<div class="layout-title">
<span>EasySQLite</span>
</div>
</div>
<div class="layout-user">
<img class="layout-avatar" src="./favicon.png">
<div class="layout-title">
<span>綆$悊鍛?lt;/span>
</div>
<div class="layout-user-state"></div>
</div>
</Side>
<Main>
<CascadingValue Value="this" IsFixed="true">
@Body
</CascadingValue>
</Main>
<Footer>
<div class="text-center flex-fill">
<a class="page-layout-demo-footer-link" href="https://gitee.com/LongbowEnterprise/BootstrapAdmin" target="_blank">Bootstrap Admin</a>
</div>
</Footer>
<NotFound>
<p>Sorry, there's nothing at this address.</p>
</NotFound>
</Layout>
<Drawer Placement="Placement.Right" @bind-IsOpen="@IsOpen" IsBackdrop="true">
<div class="layout-drawer-body">
<div class="btn btn-info w-100" @onclick="@(e=> IsOpen=false)">鐐瑰嚮鍏抽棴</div>
<div class="page-layout-demo-option">
<p>甯冨眬璋冩暣</p>
<div class="row">
<div class="col-6">
<div class="layout-item @(IsFullSide ? "active d-flex" : "d-flex")" @onclick="@(e=> IsFullSide=true)" data-toggle="tooltip" title="宸﹀彸緇撴瀯">
<div class="layout-left d-flex flex-column">
<div class="layout-left-header"></div>
<div class="layout-left-body flex-fill"></div>
</div>
<div class="layout-right d-flex flex-column flex-fill">
<div class="layout-right-header"></div>
<div class="layout-right-body flex-fill"></div>
<div class="layout-right-footer"></div>
</div>
</div>
</div>
<div class="col-6">
<div class="layout-item flex-column @(IsFullSide ? "d-flex" : "active d-flex")" @onclick="@(e=> IsFullSide=false)" data-toggle="tooltip" title="涓婁笅緇撴瀯">
<div class="layout-top">
</div>
<div class="layout-body d-flex flex-fill">
<div class="layout-left">
</div>
<div class="layout-right flex-fill">
</div>
</div>
<div class="layout-footer">
</div>
</div>
</div>
</div>
</div>
<div class="page-layout-demo-option">
<p>鍥哄畾璋冩暣</p>
<div class="row">
<div class="col-6 d-flex align-items-center">
<Switch @bind-Value="@IsFixedHeader" OnColor="@Color.Success" OffColor="@Color.Secondary"></Switch>
</div>
<div class="col-6 text-right">
<span class="cell-label">鍥哄畾欏靛ご</span>
</div>
</div>
<div class="row mt-3">
<div class="col-6 d-flex align-items-center">
<Switch @bind-Value="@IsFixedFooter" OnColor="@Color.Success" OffColor="@Color.Secondary"></Switch>
</div>
<div class="col-6 text-right">
<span class="cell-label">鍥哄畾欏佃剼</span>
</div>
</div>
<div class="row mt-3">
<div class="col-6 d-flex align-items-center">
<Switch @bind-Value="@ShowFooter" OnColor="@Color.Success" OffColor="@Color.Primary"></Switch>
</div>
<div class="col-6 text-right">
<span class="cell-label">鏄劇ず欏佃剼</span>
</div>
</div>
</div>
<div class="page-layout-demo-option">
<p>涓婚閰嶈壊</p>
<div class="row">
<div class="col-2">
<span class="color color1" @onclick="@(e=> Theme="color1")"></span>
</div>
<div class="col-2">
<span class="color color2" @onclick="@(e=> Theme="color2")"></span>
</div>
<div class="col-2">
<span class="color color3" @onclick="@(e=> Theme="color3")"></span>
</div>
<div class="col-2">
<span class="color color4" @onclick="@(e=> Theme="color4")"></span>
</div>
<div class="col-2">
<span class="color color5" @onclick="@(e=> Theme="color5")"></span>
</div>
<div class="col-2">
<span class="color color6" @onclick="@(e=> Theme="color6")"></span>
</div>
</div>
</div>
<div class="page-layout-demo-option">
<p>鏇村璁劇疆</p>
<div class="row">
<div class="col-6 d-flex align-items-center">
<Switch @bind-Value="@UseTabSet" OnColor="@Color.Success" OffColor="@Color.Primary"></Switch>
</div>
<div class="col-6 text-right">
<span class="cell-label">@(UseTabSet ? "澶氭爣絳? : "鍗曢〉")</span>
</div>
</div>
</div>
</div>
</Drawer>
public partial class MainLayout
{
private bool UseTabSet { get; set; }=true;
private string Theme { get; set; }="";
private bool IsOpen { get; set; }
private bool IsFixedHeader { get; set; }=true;
private bool IsFixedFooter { get; set; }=true;
private bool IsFullSide { get; set; }=true;
private bool ShowFooter { get; set; }=true;
private List<MenuItem>? Menus { get; set; }
/// <summary>
/// OnInitialized 鏂規(guī)硶
/// </summary>
protected override void OnInitialized()
{
base.OnInitialized();
Menus=GetIconSideMenuItems();
}
private static List<MenuItem> GetIconSideMenuItems()
{
var menus=new List<MenuItem>
{
new MenuItem() { Text="Home", Icon="fa-solid fa-fw fa-flag", Url="/" , Match=NavLinkMatch.All},
new MenuItem() { Text="鐝駭綆$悊", Icon="fa-solid fa-fw fas fa-user-secret", Url="SchoolClass" },
new MenuItem() { Text="瀛︾敓綆$悊", Icon="fa-solid fa-fw fas fa-universal-access", Url="Student" },
};
return menus;
}
}
@page "/"
<!-- 寮曠敤 BootstrapBlazor.FontAwesome 瀛椾綋搴撳寘 -->
<link href="_content/BootstrapBlazor.FontAwesome/css/font-awesome.min.css" rel="stylesheet">
<!-- 寮曠敤 BootstrapBlazor 緇勪歡搴撳寘 -->
<link href="_content/BootstrapBlazor/css/bootstrap.blazor.bundle.min.css" rel="stylesheet">
<!--寮曞叆BootstrapBlazor 緇勪歡搴撳寘-->
<script src="_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js"></script>
<PageTitle>Home</PageTitle>
<h2>涓冨ぉ.NET 8鎿嶄綔SQLite鍏ラ棬鍒板疄鎴樿緇嗘暀紼?lt;/h2>
<h5>SQLite鏄竴涓交閲忕駭鐨勫祵鍏ュ紡鍏崇郴鍨嬫暟鎹簱錛屽畠浠ヤ竴涓皬鍨嬬殑C璇█搴撶殑褰㈠紡瀛樺湪銆傚畠鏄竴涓嚜鍖呭惈銆佹棤闇€鏈嶅姟鍣ㄣ€侀浂閰嶇疆鐨勬暟鎹簱寮曟搸銆備笌浼犵粺鐨勬暟鎹簱緋葷粺涓嶅悓錛孲QLite鐩存帴璇誨啓鏅€氱鐩樻枃浠訛紝涓嶉渶瑕佸崟鐙殑鏁版嵁搴撴湇鍔″櫒銆傚畠鏀寔鏍囧噯鐨凷QL鏌ヨ璇█錛屽茍鎻愪緵浜嗕簨鍔℃敮鎸佸拰ACID灞炴€э紙鍘熷瓙鎬с€佷竴鑷存€с€侀殧紱繪€у拰鎸佷箙鎬э級(jí)銆?lt;/h5>
<div class="images-item" style="width:60%;margin-top:10px;">
<ImageViewer Url="./涓冨ぉ.NET 8鎿嶄綔SQLite鍏ラ棬鍒板疄鎴?png" ShowPlaceHolder="false" />
</div>
<DemoBlock Title="鍩虹鐢ㄦ硶" Introduction="鍙悓鏃跺睍寮€澶氫釜闈㈡澘錛岄潰鏉夸箣闂翠笉褰卞搷" Name="Normal">
<Collapse OnCollapseChanged="@OnChanged">
<CollapseItems>
<CollapseItem Text="宓屽叆寮?>
<div>SQLite鐨勫簱鍙互杞繪澗鍦板祵鍏ュ埌搴旂敤紼嬪簭涓紝涓嶉渶瑕佺嫭绔嬬殑鏁版嵁搴撴湇鍔″櫒榪涚▼銆?lt;/div>
</CollapseItem>
<CollapseItem Text="鏃犳湇鍔″櫒" IsCollapsed="false">
<div>涓庡ぇ澶氭暟鏁版嵁搴撶郴緇熶笉鍚岋紝SQLite涓嶉渶瑕佸崟鐙殑鏁版嵁搴撴湇鍔″櫒錛屾墍鏈夋暟鎹兘瀛樺偍鍦ㄤ竴涓鐩樻枃浠朵腑銆?lt;/div>
</CollapseItem>
<CollapseItem Text="闆墮厤緗?>
<div>浣跨敤SQLite鏃訛紝娌℃湁浠諱綍澶嶆潅鐨勯厤緗垨綆$悊浠誨姟銆傚彧闇€寮曞叆SQLite搴擄紝騫跺紑濮嬩嬌鐢ㄥ嵆鍙€?lt;/div>
</CollapseItem>
<CollapseItem Text="杞婚噺綰?>
<div>SQLite鏄竴涓交閲忕駭鐨勬暟鎹簱寮曟搸錛屽簱鏂囦歡鐨勫ぇ灝忓緢灝忥紝騫朵笖鍦ㄥ唴瀛樹嬌鐢ㄦ柟闈篃闈炲父楂樻晥銆?lt;/div>
</CollapseItem>
</CollapseItems>
</Collapse>
<ConsoleLogger @ref="NormalLogger" />
</DemoBlock>
<AttributeTable Items="@GetAttributes()" />
public partial class Home
{
[Not]
private ConsoleLogger? NormalLogger { get; set; }
private Task OnChanged(CollapseItem item)
{
NormalLogger.Log($"{item.Text}: {item.IsCollapsed}");
return Task.CompletedTask;
}
private bool State { get; set; }
private void OnToggle()
{
State=!State;
}
/// <summary>
/// 鑾峰緱灞炴€ф柟娉?br> /// </summary>
/// <returns></returns>
private AttributeItem[] GetAttributes()=>
[
new()
{
Name="CollapseItems",
Description="鍐呭",
Type="RenderFragment",
ValueList=" 鈥?",
DefaultValue=" 鈥?"
},
new()
{
Name="IsAccordion",
Description="鏄惁鎵嬮鐞存晥鏋?,
Type="bool",
ValueList="true|false",
DefaultValue="false"
},
new()
{
Name="OnCollapseChanged",
Description="欏圭洰鏀惰搗灞曞紑鐘舵€佹敼鍙樺洖璋冩柟娉?,
Type="Func<CollapseItem, Task>",
ValueList=" 鈥?",
DefaultValue=" 鈥?"
}
];
}
public class AttributeItem
{
/// <summary>
/// 鑾峰彇鎴栬緗睘鎬х殑鍚嶇О銆?br> /// </summary>
public string Name { get; set; }
/// <summary>
/// 鑾峰彇鎴栬緗睘鎬х殑鎻忚堪銆?br> /// </summary>
public string Description { get; set; }
/// <summary>
/// 鑾峰彇鎴栬緗睘鎬х殑綾誨瀷銆?br> /// </summary>
public string Type { get; set; }
/// <summary>
/// 鑾峰彇鎴栬緗睘鎬х殑鍙栧€煎垪琛紙濡傛灉鏈夛級(jí)銆?br> /// </summary>
public string ValueList { get; set; }
/// <summary>
/// 鑾峰彇鎴栬緗睘鎬х殑榛樿鍊箋€?br> /// </summary>
public string DefaultValue { get; set; }
}
C#/.NET/.NET Core鎺ㄨ崘瀛︿範(fàn)涔︾睄
C#/.NET/.NET Core瀛︿範(fàn)瑙嗛姹囨€?/span>
C#/.NET/.NET Core浼樼欏圭洰妗嗘灦鎺ㄨ崘
C#/.NET/.NET Core闈㈣瘯瀹濆吀錛堝熀紜€鐗堬級(jí)
C#/.NET/.NET Core瀛︿範(fàn)銆佸伐浣溿€侀潰璇曟寚鍗?/span>
Bootstrap 5.0姝e紡鍙戝竷浜嗭紝甯︽潵浜嗗緢澶氫寒鐐癸紝榪樺寰楀姩鍚楋紵
Bootstrap 鏄墠浜涘勾鍗佸垎嫻佽錛屽綋鍓嶆瘮杈冩祦琛岀殑鍓嶇妗嗘灦錛岀敱鍥藉唴涓婁笉浜嗙殑鎺ㄧ壒鍑哄搧錛屽熀浜?css / html / javascript 鎻愪緵浜嗙畝媧佺殑api錛屼互鍙?qiáng)鏇翠负瀹屽杽鐨勪汉鎬у寲鐨勭綉绔欓鏍鹼紝騫跺吋瀹瑰ぇ澶氭暟 jQuery 鎻掍歡銆傘€傜壒鐐規(guī)槸涓婃墜綆€鍗曠伒媧伙紝褰撳勾涓€緇忔帹鍑猴紝鍙楀埌浜嗗ぇ閲忓墠绔紑鍙戣€呯殑闈掔潗錛屾瀬澶у湴鍔犲揩浜?web 寮€鍙戠殑閫熷害錛屾槸 web 鍓嶇寮€鍙戜漢鍛樼殑涓€涓噸瑕佸伐鍏楓€?/span>
bootstrap5 瀹樼綉鎴浘
鍘嗙粡浜?涓ぇ鐗堟湰鐨勬洿鏂幫紝濡備粖 Bootstrap 5.0 姝e紡鐗堜篃姝e紡鍙戝竷浜嗭紝甯︽潵寰堝鏂扮壒鎬э細(xì)
鍦ㄧЩ鍔ㄤ簰鑱旂綉鍒氬垰鍏磋搗鐨勯偅浜涘勾錛屽墠绔病鏈夌幇鍦ㄩ偅涔堝宸ュ叿錛孊ootstrap 鍙皳涓€楠戠粷灝橈紝縐誨姩浼樺厛鐨勮嚜閫傚簲甯冨眬錛岄厤鍚?jQuery錛岃繕鏈夋垚鍗冧笂涓囩殑婕備寒涓婚錛岃兘蹇€熷湴鎼緩闈炲父緹庤鍋ュ.鐨?web 搴旂敤銆傚墠涓嶄箙 Bootstrap 榪樺彂甯冧簡瀹樻柟鐨勫紑婧愬浘鏍囧簱 Bootstrap Icons錛屽悓鏍烽兘鏄潪甯鎬紭縐€鐨勫紑婧愰」鐩€?/span>
bootstrap 涓婚
Bootstrap 5.0 浣滀負(fù)浼犵粺鐨?css / html / js 妗嗘灦錛屼嬌鐢ㄤ篃寰堢畝鍗曪紝鏃犻渶鍘誨涔?vue.js 閭d簺鏁版嵁緇戝畾瑙嗗浘鐨勫師鐞嗭紝鍙互鐩存帴寮曞叆錛屼篃鍙互閫氳繃 npm 瀹夎錛屽嵆浣挎槸浣跨敤 PHP 鎴?Java 鐨勫悗绔紑鍙戣€咃紝涔熷彲浠ュ揩閫熷湴閫氳繃瀹樼綉鏂囨。涓婃墜銆?/span>
瑕佹兂鏄庣櫧榪欎釜闂錛屽彧瑕佽€冭檻鍑犱釜闂灝辮浜嗐€?/span>
闈炲父涓嶅緩璁€傚洜涓?Bootstrap 鏄搷浣?dom 鐨勶紝鑰?vue 閮芥槸铏氭嫙鐨?dom錛屼竴璧鋒惌閰嶄嬌鐢ㄤ細(xì)寰堝鏄撳鑷村緢澶氶棶棰樸€倂ue 鐢熸€佹湁寰堝寰堜紭縐€鐨?UI 緇勪歡搴擄紝涔嬪墠涔熸帹鑽愯繃寰堝錛屽彲浠ョ炕緲諱互鍓嶇殑鏂囩珷錛宲c / 縐誨姩绔紝admin 搴旀湁灝芥湁銆?/span>
Bootstrap 鏄敱 Twitter 鐨?Mark Otto 鍜?Jacob Thornton 寮€鍙戠殑錛屽湪 GitHub 涓婂彂甯冪殑寮€婧愪駭鍝侊紝鍩轟簬 MIT 寮€婧愬崗璁紝鎵€鏈変釜浜恒€佸叕鍙稿拰緇勭粐閮藉彲浠ヤ笅杞戒嬌鐢紝鍏嶈垂鐢ㄤ簬鍟嗕笟欏圭洰銆?/span>
鍏蟲敞鎴戯紝鎸佺畫鍒嗕韓楂樿川閲忕殑鍏嶈垂寮€婧愩€佸厤璐瑰晢鐢ㄧ殑璧勬簮銆?/span>
鈫撯啌鐐廣€愪簡瑙f洿澶氥€戞煡鐪嬫湰嬈″垎浜殑緗戝潃銆?/span>