學習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
更多相關文章
  • 前言 嗨嘍~大家好呀,這裡是魔王吶 ! 我又來更新小姐姐網站,批量採集得辦法拉~ 讓我們一起來學習吧~ 開發環境: Python 3.8 Pycharm 模塊使用: 第三方模塊 需要安裝 在cmd裡面 進行 pip install requests / parsel requests 如何安裝pyt ...
  • 1.os.walk 返回指定路徑下所有文件和子文件夾中所有文件列表 其中文件夾下路徑如下: import os def file_name_walk(file_dir): for root, dirs, files in os.walk(file_dir): print("root", root) ...
  • Nacos 動態配置原理 可憐夜半虛前席,不問蒼生問鬼神。 簡介 動態配置管理是 Nacos 的三大功能之一,通過動態配置服務,我們可以在所有環境中以集中和動態的方式管理所有應用程式或服務的配置信息。 動態配置中心可以實現配置更新時無需重新部署應用程式和服務即可使相應的配置信息生效,這極大了增加了系 ...
  • python煙花代碼 如下 # -*- coding: utf-8 -*- import math, random,time import threading import tkinter as tk import re #import uuid Fireworks=[] maxFireworks= ...
  • 1.有n個評委,他們給出score個分數,請用代碼寫出平均值,ave代表平均值 2022-10-15 13:17:10 int main() { int n, i =1, score, sum = 0, ave; printf("請輸入評委人數:"); scanf("%d",&n); while ( ...
  • MinGW 和arm-none-eabi 下載百度雲 鏈接:https://pan.baidu.com/s/1AvPXFQbkb7fi10lrJ3chsA 提取碼:sh3x 首先建議你閱讀官方建議 https://infocenter.nordicsemi.com/index.jsp?topic=% ...
  • 本文主要介紹 Filebeat 的相關概念及基本使用,相關的環境及軟體信息如下:CentOS 7.9、FileBeat 8.2.2、Logstash 8.2.2、Elasticsearch 8.2.2。 1、Filebeat 簡介 1.1、Filebeat 總覽 Filebeat 是用於轉發和集中日 ...
  • 搞過Java的碼農都知道,在J2EE開發中一個(確切地說,應該是一類)很重要的框架,那就是ORM(Object Relational Mapping,對象關係映射)。它把Java中的類和資料庫中的表關聯起來,可以像操作對象那樣操作數據表,十分方便。給碼農們節約了大量的時間去摸魚。其實它的本質一點都不 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...