(8/30)大家一起學Blazor:CSS樣式修改和資料綁定詳述

(8/30)大家一起學Blazor:CSS樣式修改和資料綁定詳述

現在每次啟動專案,預設路徑都會是`/`,但我們目前沒有Component套用這個路由,要自己切換到`Post`實在有些麻煩,另外Menu的圖示也跟名稱不符,我們來調整一下。

最後更新 2021/12/13 下午10:36
StrayaWorker
預計閱讀 3 分鐘
分類
Blazor
專題
一起學Blazor系列
標籤
.NET C# ASP.NET Core Blazor

現在每次啟動專案,預設路徑都會是/,但我們目前沒有 Component 套用這個路由,要自己切換到Post實在有些麻煩,另外 Menu 的圖示也跟名稱不符,我們來調整一下。

我們先來改 icon,由於font-awesome目前已用會員制,必須登入才能產生一套免費的 icon 集合,因此筆者使用bootstrapicon。首先去bootstrapicon頁面下載zip檔案(不想下載檔案的人可以直接引用 CDN),將檔案解壓縮存放在wwwroot,在_Layout.cshtml引用bootstrap-icons.css,在官網搜尋自己喜歡的 icon 套用即可,筆者這邊還做了些樣式調整。

bootstrap下載icon頁面1

bootstrap下載icon頁面2

bootstrap下載icon頁面2

bootstrap下載icon頁面3

修改bootstrap類別

bootstrap圖示

接著開啟 Blazor Server 專案的launchSettings.json檔案,在 profiles 內的 BlazorServer 輸入這行"launchUrl": "Post"。

Day06 有提到繫結,不過只有稍微帶過,因為當時的目的只是展示form,現在來詳細說明一下。

Blazor 的資料繫結分為單向繫結(one way binding)跟雙向繫結(two way binding),單向繫結就是在頁面上輸入@variable,有什麼資料就顯示什麼。

單向繫結

雙向繫結則要用@bind-value將 input 內的資料跟頁面綁在一起,頁面輸入的內容也會反向影響資料。

雙向繫結

如果有學過 Angular 的人應該會很熟悉,就是[ngModel]跟[(ngModel)]的用途,只是名字換了一個。

那 Blazor 有像 Angular 的(click)事件繫結嗎?也是有的,不過若用<InputText>Component 會說到較為複雜如EventCallBack的內容,所以筆者這邊先用單純的<input>元素,之後講到EventCallBack再回來說明。

先把<InputText>換成<input>,接著將@bind-Value改成@bind,再加入@bind:event,值為html的事件名,如onchangeoninput等等,這些事件在 MDN 都可以查到。接著在網頁的輸入框輸入內容,就可以看到底下的字即時變換了,可以看到我的焦點雖然仍在 input 元素上,底下的內容已經改變了。

事件繫結

不過oninputonchange的使用時機最好再拿捏一下,如果使用oninput繫結number型別的資料,當使用者輸入 1.5 的瞬間,就會被改為 1,這會讓使用者困惑,若用onchange,則是在使用者移開焦點後才會將 1.5 改為 1。若非得用oninput的話,可以將繫結資料改為nullable或是字串,再使用 getter,setter 自己做邏輯處理不合法資料。

那 Blazor 有類似 Angular 的pipe去改變網頁的資料格式如 number、datetime 嗎?目前有提供@bind:format繫結可以改變日期格式,我們先在PostModel加入一個CreateDateTime,接著複製一組標題的div貼上,將label@bind的繫結資料改一下,再把@bind:event改成@bind:format,就可以看到顯示成指定的日期格式。

格式繫結

要注意的是 Blazor 並沒有對應<select>的 Component,因為 HTML 的attribute不能有null,最接近null的概念是移除value這個attribute,但如果選到一個沒有value<option>,瀏覽器會將該<option>的文字當成value

本文引用:

註:本文程式碼透過 .NET 6 + Visual Studio 2022 重構,可點選原文連結與重構後程式碼比較學習,謝謝閱讀,支持原作者

繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2021/12/25

(29/30)大家一起學Blazor:Blazor單元測試

開發一個系統最無聊的過程大概就是解決 Bug 了,尤其是那種嘗試對 null 物件取值的錯誤(`Object reference not set to an instance of an object.`),這應該是大部分人剛踏入程式設計領域最常碰到的問題,為了從枯燥的解決 Bug 過程解脫,這篇就來介紹`單元測試`。

繼續閱讀
同分類 / 同標籤 2021/12/25

(28/30)大家一起學Blazor:Policy-based authorization

之前有說到`ASP.NET Core Identity` 使用的是基於`Claim` 的驗證,其實`ASP.NET Core Identity` 有不同類型的授權方式,最簡單的`登入授權`、`角色授權`、`Claim 授權`,但上述幾種都是以一種方式實現:原則授權(`Policy-based authorization`)。

繼續閱讀