主頁 > .NET開發 > MASA Blazor入門這一篇就夠了

MASA Blazor入門這一篇就夠了

2022-03-23 06:11:44 .NET開發

1.什么是Blazor? 有什么優勢?

ASP.NET Core Blazor 簡介

Blazor 是一個使用 Blazor 生成互動式客戶端 Web UI 的框架:

  1. 使用 C# 代替 JavaScript 來創建資訊豐富的互動式 UI,
  2. 共享使用 .NET 撰寫的服務器端和客戶端應用邏輯,
  3. 將 UI 呈現為 HTML 和 CSS,以支持眾多瀏覽器,其中包括移動瀏覽器,
  4. 與新式托管平臺(如 Docker)集成,

Blazor 優勢:

  1. 使用 C# 代替 JavaScript 來撰寫代碼,
  2. 利用現有的 .NET 庫生態系統,
  3. 在服務器和客戶端之間共享應用邏輯,
  4. 受益于 .NET 的性能、可靠性和安全性,
  5. 在 Windows、Linux 和 macOS 上使用 Visual Studio 保持高效作業,
  6. 以一組穩定、功能豐富且易用的通用語言、框架和工具為基礎來進行生成,

2.為什么選擇MASA Blazor?能用來干什么?

MASA Blazor是一個基于 Blazor Component 和 Material Design 的 UI 組件庫,
dotNET開發者不需要懂得javascript就能開發一個企業級中后臺系統,
MASA Blazor優勢:

  • 豐富組件:包含Vuetify 1:1還原的基礎組件,以及很多實用的預置組件和.Net深度集成功能,包括Url、面包 屑、導航三聯動,高級搜索,i18n等,
  • UI設計語言:設計風格現代,UI 多端體驗設計優秀,
  • 簡易上手:豐富詳細的上手檔案,免費的視頻教程(制作中),
  • 社區活躍鼓勵:用戶參與實時互動,做出貢獻加入我們,構建最開放的開源社區,
  • 長期支持:全職團隊維護,并提供企業級支持,
  • 專業示例:MASA Blazor Pro提供多種常見場景的預設布局,

MASA Blazor Pro預設布局示例:

看到這里是不是有同學對此感興趣起來了呢!那么這樣的布局頁面是怎么構建出來的呢?我們自己能不能也搭建一個這樣的布局呢!嘿嘿!不要著急、我們接著往下看,

3.使用MASA Blazor模板創建第一個Blazor程式

1.首先安裝Masa.Template模板

(1)檢查本機.Net SDK版本,請確保已安裝.NET6.0

(2)安裝 Masa.Template模板,包含 MASA 系列所有專案模板
dotnet new --install Masa.Template

2.創建專案

dotnet new masab -o MasaBlazorApp
默認為Server模式 可通過引數--Mode WebAssembly 創建 WebAssembly 模式專案

3.配置 MASA Blazor(由于我這里使用了模板,以下配置在模板中都已經幫我們配好了,安裝模板后直接dotnet run 即可;未安裝模板的同學,按下面步驟配置即可)

(1)安裝NuGet包

dotnet add package Masa.Blazor

(2)引入資源檔案(我這里為Blazor Server)

在 Pages/_Layout.cshtml 中引入資源檔案

(3)注入相關服務

在 Program.cs 中添加 Masa.Blazor 相關服務

builder.Services.AddMasaBlazor();

(4)修改 _Imports.razor 檔案,添加以下內容:

  @using Masa.Blazor

(5)運行專案

到這里一個簡單的MASA Blazor專案就搭建完成啦,當然這只是最基礎的,接下來我們將一步一步使用MASA Blazor專案組件來豐富我們的專案,

3.使用MASA Blazor組件配置專案

示例:

(1)Blazor應用結構介紹

首先我們先來看看Blazor專案結構,分析主要幾個檔案的作用,(概念定義比較枯燥,想直接體驗的同學可以直接跳過此部分,直接上手實踐即可,但不推薦這么做,有句話說得好“磨刀不誤砍柴工”

Program.cs

Blazor服務器應用的入口點在Program.cs檔案中定義,與控制臺應用一樣,當應用執行時,它會使用特定于 Web 應用的默認值創建并運行 Web 主機實體, Web 主機會管理 Blazor 服務器應用的生命周期,并設定主機級別服務,

Blazor 服務器應用中,顯示的 Program.cs 檔案用于為 Blazor 在客戶端瀏覽器與服務器之間使用的實時連接設定終結點,
BlazorWebAssembly 應用中,Program.cs 檔案定義應用的根組件及其呈現位置:

在Program.cs檔案中我們先主要關注幾個點:

1.在依賴注入中,因為我們利用了Razor來實作C#和html的混合編碼以及我們使用的是ServerSide的Blazor,注入代碼如下:

中間件如下:

_Host.cshtml

在Blazor服務器應用中,根組件的主機頁面在_Host.cshtml檔案中定義,這個檔案定義一個Razor頁面,而不是一個組件,Razor Pages 使用 Razor 語法定義服務器可尋址頁面,

在Program.cs檔案中會自動去我們配置的_Host.cshtml檔案中尋找根組件
這是默認使用App組件作為根組件(這是啟動Blazor應用的必要條件之一)

那么render-mode 特性是用來干什么的呢?
讓我們來看看官方檔案解釋:

App.razor
Blazor應用的根組件,里面通常包含Router組件用來處理Blazor中的路由

那么Router組件中的這些引數比如AppAssembly、Found、NotFound都有什么作用呢?

通過閱讀官方檔案我們可以發現:

Router 組件會在指定的 AppAssembly 和 AdditionalAssemblies(可選)中發現可路由組件, 瀏覽器進行導航時,如果有路由與地址匹配,Router 會攔截導航并呈現其 Found 引數的內容和提取的 RouteData,否則 Router 會呈現其 NotFound 引數,

RouteView 組件負責呈現由 RouteData 指定的匹配組件及其布局(如果有), 如果匹配組件沒有布局,則使用可選擇指定的 DefaultLayout,

LayoutView 組件在指定布局內呈現其子內容

也就是說我們在配置完.razor頁面的路由后,Router組件會在瀏覽器進行導航時將路由與地址匹配,能夠匹配到的,Router就會攔截導航并呈現其Found引數指定的匹配組件和布局(我們這里指定MainLayout布局頁面),反之,則呈現NotFound引數,

_Layout.cshtml

在之前的_Host.cshtml檔案中我們默認指定啟用了_Layout.cshtml布局頁

_Layout.cshtml是Blazor應用的主機頁(相當于一個根頁面布局檔案),里面包含應用的初始化HTML 及其組件,它使得我們所有頁面布局保持的外觀變得更加的容易,

MainLayout.razor

在Blazor中,使用布局組件處理頁面布局,布局組件繼承自LayoutComponentBase,后者定義型別RenderFragment 的單個 Body 屬性,該屬性可用于呈現頁面的內容,

_Imports.razor
全域匯入配置,在這里使用using引入后,相當于在所有razor檔案中都進行了引入,

好了,廢話有點多, 到這里Blazor應用部分主要結構概念差不多已經介紹完了,感興趣的同學可自行移步官網進行閱讀 面向 Web Forms ASP.NET Web Forms 開發人員的 Blazor
接下來我們直接開始擼代碼

(2)使用App bars(應用欄)與Navigation drawers(導航抽屜)配置導航欄與選單欄

上述頁面展示中我們看到了三個選單頁面,這幾個頁面都分別配置了對應路由
Home對應頁面為Index.razor、路由為"/"

Counter對應頁面為Counter.razor、路由為"/counter"

Fetch Data頁面對應FetchData.razor頁面路由,路由為"/fetchdata"
在Shared/MainLayout.razor頁面中我們可以看到配置,

接下來我們直接移步MASA Blazor 官網地址找到我們需要的組件示例:

我們直接將示例代碼拷貝至Shared/MainLayout.razor頁面中的MAppBar組件中即可

dotnet run 看下效果

接下來我們MASA Blazor組件庫中找到Navigation drawers組件,將razor頁面代碼與C#代碼拷貝至組件中即可

我們對代碼稍作修改

dotnet run 看下效果

下一步我們來實作動態選單欄伸縮功能 找到Navigation drawers組件的迷你模式

接下來我們來改造我們的代碼

dotnet run 看下效果

是不是感覺超級簡單呢!當然這只是入門寫法,拋磚引玉,感興趣的同學可以動手試試,舉一反三解鎖更多組件的用法與寫法

(3)使用DataTable、Dialog等組件實作一個基礎的資料互動頁

首先我們先初始化Fetch.razor,只留一個最簡單組件

DataTable組件需要至少系結一個Headers(表頭)和資料源
所以下一步我們先定義Headers與Items(實際呼叫API獲取資料即可,這里默認死資料僅作參考)
我們先建一個Fetch.razor頁的分部類,定義部分代碼

dotnet run 看看效果

在上述代碼截圖中會發現我們用到了OnInitializedAsync()方法,那么這個方法是用來干什么的呢?說到這個問題,我們需要先了解了解Razor組件的生命周期ASP.NET Core Razor 組件生命周期

先來看個 Component lifecycle diagram(組件生命周期圖)

SetParametersAsync - 設定引數時

每當父級呈現時,都會執行此方法,
傳入組件的引數包含在ParameterView中,這是根據傳入組件的狀態對服務器進行異步呼叫(例如)的好時機,
在重寫中呼叫base.SetParametersAsync(Parameters)時,會為組件的[Parameter]屬性賦值,
它也是指定默認引數值的正確位置,

OnInitialized / OnInitializedAsync - 組件初始化

ParameterCollection中的狀態分配給組件的[Parameter]屬性后,將執行這些方法,這與SetParametersAsync的用法相同,不同之處在于可以使用組件的狀態,

該方法僅在組件首次創建時執行一次,如果父級稍后更改組件的引數,則跳過此方法,
注意:當組件是@page,并且Blazor應用程式導航到呈現同一頁面的新URL時,Blazor將為該頁面重用當前物件實體,因為該物件是同一實體,所以Blazor不會對該物件呼叫IDisposable.Dispose,也不會再次執行其OnInitialized方法,

OnParametersSet / OnParametersSetAsync - 引數設定后

如果這是組件的新實體,則此方法將在OnInitializedAsync之后立即執行,如果它是因為其父組件正在重新呈現而正在重新呈現的現有組件,則不會執行OnInitialized*方法,而是在SetParametersAsync之后立即執行此方法,

OnAfterRender / OnAfterRenderAsync - 組件渲染后

這兩個方法在Blazor每次重新生成組件的
RenderTree
時執行,這可能是因為組件的父級重新呈現、用戶與組件互動(例如,滑鼠單擊),或者如果組件執行其StateHasChanged方法來呼叫重新呈現,

了解Razor組件的生命周期后,我們來繼續擼代碼

我們給資料表格增加操作列

看下效果:

接下來我們給增加一個MDialog 對話框 用來做增加修改操作
直接將官網的示例拿過來即可

在這程序中我們需要給Dialog組件以及組件中的其他組件使用Bind-Value(雙向系結)綁上值,

接下來我們給資料表格的Action操作列增加OnClick點擊事件

對應系結分部類中EditItem方法

我們先運行看下效果:


這兩個按鈕分別對應兩個Button

Close直接系結后臺關閉Dialog方法

Save方法則是用來做最終修改資料等操作DB的方法這里就不做演示,感興趣的同學可自行結合業務做相應的操作,

(4)使用預置組件應對常用業務的場景

在我們實際專案中,難免會碰到需要你開發多個模塊或者多個管理頁面,這樣一來每個頁面不可避免的會有一些需要你重復編碼的地方,那么你是選擇每個頁面copy一份相同的代碼還是選擇封裝一個業務組件呢?毫無疑問,聰明的同學肯定會選擇后者,當然新入門的同學可以先來看看MASA Blazor提供預置組件,拿來即用,后期同學們登堂入室后可自行根據當前業務封裝業務組件,

我們先來看看通用頁頭預置組件:

直接copy代碼看看效果:

當我們資料表格中資料內容長度過長時可以使用封裝好的預置組件:
看看效果:

使用方法很簡單且支持復制效果:

當然還有其他常用的預置組件,由于本文篇幅有限,只做個別組件使用介紹,使用方法都大差不差,感興趣的同學可自行去官網查閱,

結尾

本文介紹內容只針對剛入門的同學,拋磚引玉,對于封裝組件技巧以及組件高深用法感興趣的同學可以關注我們同系列其他同學的文章或者直接去官網查看原始碼:

使用MASA Blazor開發一個標準的查詢表格頁以及封裝技巧介紹

參考資源

  • https://blazor.masastack.com/
  • https://github.com/BlazorComponent/MASA.Blazor
  • https://gitee.com/blazorcomponent/MASA.Blazor
  • https://blazor-pro.masastack.com/dashboards/ecommerce
  • https://github.com/BlazorComponent/MASA.Blazor.Pro
  • https://blazor-university.com/
  • https://github.com/capdiem/MASA.Blazor.Experimental.Components

開源地址

MASA.BuildingBlocks:https://github.com/masastack/MASA.BuildingBlocks

MASA.Contrib:https://github.com/masastack/MASA.Contrib

MASA.Utils:https://github.com/masastack/MASA.Utils

MASA.EShop:https://github.com/masalabs/MASA.EShop

MASA.Blazor:https://github.com/BlazorComponent/MASA.Blazor

如果你對我們的 MASA Framework 感興趣,無論是代碼貢獻、使用、提 Issue,歡迎聯系我們

16373211753064.png

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/446919.html

標籤:C#

上一篇:將MSAccess資料庫遷移到SQLServer2008R2

下一篇:Net6Configuration & Options 原始碼分析 Part3 IOptionsMonitor 是如何接收到組態檔變更并同步資料源的

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more