學習ASP.NET Core Blazor編程系列九——伺服器端校驗

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

長連接與短連接 所謂長連接,指在一個TCP連接上可以連續發送多個數據包,在TCP連接保持期間,如果沒有數據包發送,需要雙方發檢測包以維持此連接,一般需要自己做線上維持。 短連接是指通信雙方有數據交互時,就建立一個TCP連接,數據發送完成後,則斷開此TCP連接,一般銀行都使用短連接。 比如http的, ...


學習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編程系列七——新增圖書 學習ASP.NET Core Blazor編程系列八——數據校驗  

提交表單時,在伺服器端進行表單驗證

      EditForm 組件中,有三個事件可用於觸發表單提交操作:

  • OnSubmit:無論驗證結果如何,只要用戶提交表單,就會觸發此事件。
  • OnValidSubmit:當用戶提交表單並且他們的輸入驗證通過時,將觸發此事件。
  • OnInvalidSubmit:當用戶提交表單並且他們的輸入驗證失敗時,將觸發此事件。

       如果使用 OnSubmit事件,則不會觸發其他兩個事件。可以使用EditContext的Model參數來處理輸入數據。如果要編寫自己的邏輯來處理表單提交,請使用此事件。具體代碼如下:

@page "/AddBook"
@using BlazorAppDemo.Models
@using Microsoft.EntityFrameworkCore
@inject IDbContextFactory<BookContext> dbFactory
 
<h3>AddBook</h3>
<EditForm Model=@addBook OnSubmit="Save">

    <DataAnnotationsValidator />
    <ValidationSummary />
 
    <div>@Message</div>

    <p> 圖書名稱:
    <InputText @bind-Value=addBook.Name></InputText>
        <ValidationMessage For="@(() => addBook.Name)" />
    </p>

    <p>作者:
    <InputText @bind-Value=addBook.Author></InputText>
        <ValidationMessage For="@(() => addBook.Author)" />
    </p>
  

    <p>出版日期:
    <InputDate @bind-Value=addBook.ReleaseDate></InputDate>
     </p>
    <p>價格:

    <InputNumber @bind-Value=addBook.Price></InputNumber>
     </p>
    <p>類型:

     <InputText @bind-Value=addBook.Type></InputText>
        <ValidationMessage For="@(() => addBook.Type)" />
      </p>

    <p>總頁數:
    <InputNumber @bind-Value=addBook.TotalPages></InputNumber>
     </p>

    <p>庫存數量:
    <InputNumber @bind-Value=addBook.StockQty></InputNumber>
        <ValidationMessage For="@(() => addBook.StockQty)" />
     </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)
    {
        bool dataIsValid = editContext.Validate();

        if (!dataIsValid)
        {
            Message = "你編輯的圖書信息校驗不通過,請修改。";
            return;
        }

        if (editContext.Model is not Book addBook)
        {
            Message = "你編輯的不是圖書信息。";
            return;
        }
       _context.Add(editContext.Model);
        int cnt=  _context.SaveChanges();

        if (cnt>0)

        {
      Message = "圖書信息保存成功!";
  
        }else

       {
            Message = "圖書信息保存失敗!";
        }
  
    }
}
        第十一,在Visual Studio 2022的菜單欄上,找到“調試—》開始調試”或是按F5鍵,Visual Studio 2022會生成BlazorAppDemo應用程式,併在瀏覽器中打開Home頁面,我們使用滑鼠點擊左邊的菜單欄上的“添加圖書”菜單項,然後使用滑鼠左鍵點擊“保存”按鈕,由於我們沒有輸入正確的數據,校驗組件將會提示我們要輸入的數據。如下圖。在圖中紅框處,顯示了我們在後臺處理之後,返回到前端的提示信息。

 

       第十二,如果改用 OnValidSubmit 和 OnInvalidSubmit這兩個事件,則如果校驗不通過則會觸發OnInvalidSubmit事件,反之如果校驗通過,則會觸發OnValidSubmit事件。

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


<EditForm Model=@addBook OnValidSubmit=@ValidSubmitInfo  OnInvalidSubmit=@InvalidSubmitInfo>
    <DataAnnotationsValidator />
    <ValidationSummary />
 
    <div>@Message</div>
    <p> 圖書名稱:
    <InputText @bind-Value=addBook.Name></InputText>
        <ValidationMessage For="@(() => addBook.Name)" />
    </p>
    <p>作者:
    <InputText @bind-Value=addBook.Author></InputText>
        <ValidationMessage For="@(() => addBook.Author)" />
    </p>
    
    <p>出版日期:
    <InputDate @bind-Value=addBook.ReleaseDate></InputDate>
     </p>
    <p>價格:
    <InputNumber @bind-Value=addBook.Price></InputNumber>
     </p>
    <p>類型:
     <InputText @bind-Value=addBook.Type></InputText>
        <ValidationMessage For="@(() => addBook.Type)" />
      </p>
    <p>總頁數:
    <InputNumber @bind-Value=addBook.TotalPages></InputNumber>
     </p>
    <p>庫存數量:
    <InputNumber @bind-Value=addBook.StockQty></InputNumber>
        <ValidationMessage For="@(() => addBook.StockQty)" />
     </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 ValidSubmitInfo(EditContext editContext)
    {

        if (editContext.Model is  Book addBook)
        {
            Message = "你編輯的不是圖書信息,校驗通過。正在保存。"
           
        }
    }

    private void InvalidSubmitInfo(EditContext editContext)
    {

        if (editContext.Model is  Book addBook)
     
        {
            Message = "你編輯的圖書信息校驗不通過,請修改。";
        }
    }

 }
       第十三,在Visual Studio 2022的菜單欄上,找到“調試—》開始調試”或是按F5鍵,Visual Studio 2022會生成BlazorAppDemo應用程式,併在瀏覽器中打開Home頁面,我們使用滑鼠點擊左邊的菜單欄上的“添加圖書”菜單項,然後使用滑鼠左鍵點擊“保存”按鈕,由於我們沒有輸入正確的數據,沒有通過校驗規則,頁面重新顯示表單(如果我們填寫過數據,則會顯示我們剛纔填寫的數據),同時頁面上將會提示我們要輸入的數據的提示信息。如下圖。在圖中紅框處,顯示了我們在後臺處理之後,返回到前端的提示信息。

 

 


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

-Advertisement-
Play Games
更多相關文章
  • SpringBoot 階段測試 1 1、使用JDK8新語法完成下列集合練習: 1.1 List中有1,2,3,4,5,6,7,8,9幾個元素要求; (1) 將奇、偶數分別匯聚成一個List //初始化集合 List<Integer> numList = new ArrayList<>(); //批量 ...
  • 1、項目介紹 2、微信公眾平臺 和 微信開放文檔 2.1 微信公眾平臺 2.1.1 網址鏈接 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index 2.1.2 測試號信息 2.1.3 微信 ...
  • C Primer Plus 摘錄 第 10 章 數組和指針 10.1 數組 數組由數據類型相同的一系列元素組成。 通過聲明數組告訴編譯器數組中內含多少元素和這些元素的類型。 編譯器根據這些信息正確地創建數組。 float candy[365]; char code[12]; int states[5 ...
  • 1.邏輯 邏輯判斷:對於一件事情正確與否的判斷,python中用布爾類型真(True)、假(False)做區分; 根據判斷結果的不同去完成的不同操作,就是我們的業務邏輯; 對於條件是否滿足的判斷語句,就是條件語句; 一個邏輯語句是由條件語句+業務語句組成的。 2.if語句 判斷一個命題的真實性,如果 ...
  • 安裝 在項目的虛擬環境下執行 pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 註意:xadmin對於不同django版本有不同的版本,一定要使用相對應的版本 在app中註冊 INSTALLED_APPS = [ # ...
  • 1、Ribbon客戶端負載均衡 1.1 依賴 1.2 配置信息 # feign預設載入了ribbon負載均衡,預設負載均衡機制是:輪詢 # 負載均衡機制是添加在消費端(客戶端)的,如果改為隨機,指定服務名,指定規則 edocmall-server: ribbon: NFLoadBalancerRul ...
  • 今天我們來聊一聊關於JWT授權的事情。 JWT:Json Web Token。顧名思義,它是一種在Web中,使用Json來進行Token授權的方案。 既然沒有找好密碼,token是如何解決信任問題的呢? 解決信任問題,只需要解決兩個問題即可: token是不是來自我信任的機構頒發 token中的信息 ...
  • 場景 我們經常遠程連接伺服器去查看日誌,比較麻煩,如果直接訪問項目的某個頁面就能實時查看日誌就比較奈斯了,花了1天研究了下.net core 日誌的原理,結合blazor實現了基本效果。 實現原理 自定義日誌提供器,將日誌記錄到記憶體中,滾動10W條刪除。 提供blazor組件,實時從記憶體中讀取後顯示 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...