長連接與短連接 所謂長連接,指在一個TCP連接上可以連續發送多個數據包,在TCP連接保持期間,如果沒有數據包發送,需要雙方發檢測包以維持此連接,一般需要自己做線上維持。 短連接是指通信雙方有數據交互時,就建立一個TCP連接,數據發送完成後,則斷開此TCP連接,一般銀行都使用短連接。 比如http的, ...
學習ASP.NET Core Blazor編程系列一——綜述 學習ASP.NET Core Blazor編程系列二——第一個Blazor應用程式(上) 學習ASP.NET Core Blazor編程系列二——第一個Blazor應用程式(中)
學習ASP.NET Core Blazor編程系列二——第一個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頁面,我們使用滑鼠點擊左邊的菜單欄上的“添加圖書”菜單項,然後使用滑鼠左鍵點擊“保存”按鈕,由於我們沒有輸入正確的數據,沒有通過校驗規則,頁面重新顯示表單(如果我們填寫過數據,則會顯示我們剛纔填寫的數據),同時頁面上將會提示我們要輸入的數據的提示信息。如下圖。在圖中紅框處,顯示了我們在後臺處理之後,返回到前端的提示信息。