學習ASP.NET Core Blazor編程系列七——新增圖書

来源:https://www.cnblogs.com/chillsrc/archive/2022/10/15/16795051.html
-Advertisement-
Play Games

一、 先決條件 1.Azure Repos Git/Git和項目上傳 把本地的Net Core項目上傳至Azure Repos Git/Git 2.Docker Registry Service Connection/Azure subscription和Azure Container Regist ...


學習ASP.NET Core Blazor編程系列一——綜述 學習ASP.NET Core Blazor編程系列二——第一個Blazor應用程式(上) 學習ASP.NET Core Blazor編程系列二——第一個Blazor應用程式(中)

學習ASP.NET Core Blazor編程系列二——第一個Blazor應用程式(下) 

學習ASP.NET Core Blazor編程系列二——第一個Blazor應用程式(完) 學習ASP.NET Core Blazor編程系列三——實體 學習ASP.NET Core Blazor編程系列四——遷移 學習ASP.NET Core Blazor編程系列五——列表頁面 學習ASP.NET Core Blazor編程系列六——初始化數據

 

        上一篇文章學習ASP.NET Core Blazor編程系列六——初始化數據 中我們對資料庫進行了初始化,寫入了幾條圖書信息數據,並通過DBContext將查詢到的圖書信息,在列表頁面中顯示。通過使用@inject指令進行對象註入。

        今天,這一篇文章我們來學習一下如何新增一本圖書信息數據。

      首先,我們在Visual Studio 20222的解決方案管理器中,滑鼠右鍵單擊“Pages”文件夾。在彈出菜單中選擇,添加-->Razor組件。如下圖。

       其次,在彈出的“添加新項”對話框的名稱輸入框中輸入“AddBook.razor”。然後使用滑鼠左鍵點擊“添加”按鈕,將創建名為AddBook的Blazor組件。如下圖。

     第三,在Visual Studio 2022的文本編輯器中打開Pages/AddBook.razor文件。

        在以往經典的Web應用程式中,我們經常使用<form>元素創建表單,在表單中添加<input> 元素,<input> 有一個 type 屬性,用於指定輸入的類型及其顯示方式(作為數字、文本框、單選按鈕、覆選框、按鈕等),讓用戶輸入數據,在用戶提交表單時進行數據驗證。如果驗證成功,則可以執行相應的操作(新增,更新,刪除等)。

       那麼Blazor應用程式中如何進行數據輸入呢,Blazor也提供了一個類似表單的組件——<EditForm> 組件。此外,Blazor提供了一系列專用輸入元素,這些元素可用於格式化和驗證用戶輸入的數據。

        我們首先來實現一個功能簡單的圖書信息添加頁面,在已經打開的AddBook.razor文件中的輸入如下代碼。

@page "/AddBook"
@using BlazorAppDemo.Models
@using Microsoft.EntityFrameworkCore
@inject IDbContextFactory<BookContext> dbFactory

 

<h3>AddBook</h3> 

<EditForm Model=@addBook OnSubmit="Save">
    <div>@Message</div>
    <p> 圖書名稱:
    <InputText @bind-Value=addBook.Name></InputText>
    </p>

    <p>作者:
    <InputText @bind-value=addBook.Author></InputText>
    </p>   

    <p>出版日期:
    <InputDate @bind-value=addBook.ReleaseDate></InputDate>
     </p>
    <p>價格:
    <InputNumber @bind-Value=addBook.Price></InputNumber>
     </p>
    <p>類型:
     <InputText @bind-Value=addBook.Type></InputText>
      </p>
    <p>總頁數:
    <InputNumber @bind-Value=addBook.TotalPages></InputNumber>
     </p>
    <p>庫存數量:
    <InputNumber @bind-Value=addBook.StockQty></InputNumber>
     </p>
    <p>已租數量:
    <InputNumber @bind-Value=addBook.Qty></InputNumber>
    </p>
    <input type="submit" class="btn btn-primary" value="Save" />
 
</EditForm>

@code {

   private string Message = string.Empty;
    private static BookContext _context;
    private Models.Book addBook = new Book();
    protected override Task OnInitializedAsync()
    {
        _context = dbFactory.CreateDbContext();
        return base.OnInitializedAsync();
    }
    private void Save(EditContext editContext)
    {
        if (editContext.Model is not Book addBook)
        {
            Message = "你編輯的不是圖書信息。";
            return;
        }
        _context.Add(editContext.Model);
        int cnt=  _context.SaveChanges();
        if (cnt>0)
        {
        Message = "圖書信息保存成功!";   
        }else
       {
            Message = "圖書信息保存失敗!";
       }       
    }
}
       對於以上代碼進行簡單的說明一下,<EditForm> 控制項支持使用 Model 參數進行數據綁定。 指定一個對象作為此形參的實參。 EditForm 中的輸入控制項可使用 @bind-Value 參數綁定到由模型公開的屬性和欄位。使用 [bind-Value] 參數綁定將addBook的特定屬性綁定到EditForm中的輸入控制項中。

      Blazor 擁有自己的一組組件,旨在專用於 <EditForm> 元素並支持其他功能中的數據綁定。 下表列出了這些組件。 當 Blazor 呈現包含這些組件的頁面時,它們將轉換為表中列出的相應 HTML <input> 元素。

輸入組件

呈現為 (HTML)

InputCheckbox

<input type="checkbox">

InputDate<TValue>

<input type="date">

InputFile

<input type="file">

InputNumber<TValue>

<input type="number">

InputRadio<TValue>

<input type="radio">

InputRadioGroup<TValue>

一組子單選按鈕

InputSelect<TValue>

<select>

InputText

<input>

InputTextArea

<textarea>

      第四、在Visual Studio 2022的菜單欄上,找到“調試--》開始調試”或是按F5鍵,Visual Studio 2022會生成BlazorAppDemo應用程式,併在瀏覽器中打開Home頁面,我們使用滑鼠點擊左邊的菜單欄上的“添加圖書”菜單項,我們預期頁面會進入“AddBook”頁面,實際上的結果,應用程式給我們拋出了一個異常,如下圖。

      第五,這個異常是由於我們在“bind-value”這綁定代碼時,“value”的v寫成了小寫,如下圖。改成大寫就可以了。 

       第六,在Visual Studio 2022的菜單欄上,找到“調試--》開始調試”或是按F5鍵,Visual Studio 2022會生成BlazorAppDemo應用程式,併在瀏覽器中打開Home頁面,我們使用滑鼠點擊左邊的菜單欄上的“添加圖書”菜單項,會進入“AddBook”頁面,如下圖。

      EditForm 的在進行提交動作時,有三個與提交有關的事件:

  • OnValidSubmit. 如果表單上的輸入的數據全部通過其對應的驗證屬性所定義的驗證規則,則會觸發此事件。
  • OnInvalidSubmit. 如果表單上輸入的數據中有任何一個數據沒有通過其對應的驗證屬性所定義的驗證規則,則會觸發此事件。
  • OnSubmit. 表單上輸入的所有數據是否有效,在提交EditForm時都將會觸發生此事件。

     對於在單個EditForm中實現輸入框的基本驗證,最好調用OnValidSubmit 和 OnInvalidSubmit 事件。 如果是很複雜的驗證要求,例如將一個輸入文本框中的內容與後臺資料庫中的數據進行交叉檢查以確保值的有效,請首先使用 OnSubmit 事件。 EditForm 可以同時處理 OnValidSubmit 和 OnInvalidSubmit 事件,也可以單獨處理OnSubmit事件,不能同時處理這兩者。 通過向 EditForm 添加一個 Submit 按鈕來觸發提交。 當用戶選擇此按鈕時,將觸發由 EditForm 指定的提交事件。

      Visual Studio 2022在生成應用程式時不會檢查提交事件組合是否有效或是無效,但是如果事件選擇不正確,在運行時將會產生錯誤。 例如,如果將 OnValidSubmit 與 OnSubmit 結合使用,應用程式將生成以下運行時異常:

       Error: System.InvalidOperationException: When supplying an OnSubmit parameter to EditForm, do not also supply OnValidSubmit or OnInvalidSubmit.

       EditForm 使用 EditContext 對象跟蹤當前對象的狀態,包括哪些欄位已更改及其當前值。 提交事件將 EditContext 對象做為參數傳遞。事件處理程式可以使用此對象中的 Model欄位來檢索用戶的輸入。

       在頁面中點擊“Save”按鈕,將調用EditForm中OnSubmit事件中所指定的 Save方法,將圖書信息對象傳遞給@code代碼中的Save方法,保存圖書信息到資料庫。  

       如果不存在錯誤,應用程式將會把我們填寫的數據保存到資料庫,並且瀏覽器會重定向到書籍列表頁面,在書籍列表頁面中的書籍列表中會出現我們剛纔保存的數據。如下圖。

 

      


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上一章講到利用路由器鏡像的功能轉發消息,本章介紹物聯網終端的另一應用場景——通過智能終端收發QQ消息。 硬體準備 (無) 環境搭建 實現QQ消息轉發需要依賴社區維護的QQ客戶端gocqhttp以及聊天機器人框架nonebot2,而在這個社區內fubuki-iot是作為一個插件的形式存在的。因此完整的 ...
  • 在上一篇文章`《驅動開發:內核枚舉DpcTimer定時器》`中我們通過枚舉特征碼的方式找到了`DPC`定時器基址並輸出了內核中存在的定時器列表,本章將學習如何通過特征碼定位的方式尋找`Windows 10`系統下麵的`PspCidTable`內核句柄表地址。 ...
  • 1.字元串capitalize函數 (capitalize vt. 資本化,用大寫字母書寫(或印刷); 把…首字母大寫;) 將字元串的首字母大寫,其它字母小寫; 用法:newstr = string.capitalize() 修改後生成一個新字元串(因為字元串是不可更改數據類型); ''.capit ...
  • 大家好,我是陶朱公Boy,又和大家見面了。 前言 在文章開始前,想先問大家一個問題,大家平時在項目需求評審完後,是直接開始編碼了呢?還是會先寫詳細設計文檔,後再開始進行編碼開發? ☆現實 這個時候可能有部分小伙伴會出來反駁:還詳細設計呢連給開發的時間都不夠,項目經常被倒排期。 作者其實能感同身受上述 ...
  • 學會了技術就要使用,否則很容易忘記,因為自然界壓根就不存在什麼代碼、變數之類的玩意,這都是一些和生活常識格格不入的東西。只能多用多練,形成肌肉記憶才行。 在一次實際的產品開發中,由於業務需求的緣故,需要使用Elasticsearch搜索引擎。搜索引擎是通過索引和文檔檢索數據的,索引類似於MySQL的 ...
  • 首先依賴註入 懶得下載autofac了 直接用程式集進行批量註入 private static WebApplicationBuilder builder; internal static void Load(WebApplicationBuilder web) { builder = web; b ...
  • 前面簡單介紹了騰訊雲的由來和定義,本編介紹騰訊的簡單使用(我這個展示的是把最近寫的vs項目部署到雲服務中): 1、首先根據前面的定義註冊個騰訊雲賬戶,然後購買個雲伺服器,當然首次註冊的都有免費體驗資格,我這裡用到的是免費體驗輕量式伺服器: 進入購買然後開通就會顯示在你的輕量伺服器上,會根據你選的wi ...
  • 有這個想法的初衷 喜歡電子和DIY硬體的朋友對稚暉君應該都不陌生,他定期都會分享一些自己做的好玩的硬體,他之前做了一個ElectronBot桌面機器人我就很感興趣,所以就自己也做了一個。 起初我只是自己開發了一個叫電子腦殼的上位機軟體,大家在之前的博客里應該也有見到,是個用WinUI(WASDK)開 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...