[英]Blazor EditForm and Fluent Validation
只需將基於 EditForm 並使用 Fluent Validation 的包裝器放在一起。 我在此表單上創建了兩個屬性,如下所示:
if (ModelValidation)
{
editContext.OnValidationRequested +=
(sender, eventArgs) => ValidateModel((EditContext)sender, messages);
}
if (FieldValidation)
{
editContext.OnFieldChanged +=
(sender, eventArgs) => ValidateField(editContext, messages, eventArgs.FieldIdentifier);
}
這允許驗證在 OnFieldChanged 上(值更改,在退出字段上驗證)或在按下提交按鈕時(OnValidationRequested)
但是,如果我說一個為空的文本字段(應該是非空的)選項卡,則 OnFieldChanged() 處理程序不會觸發......(這並不奇怪該字段沒有改變)。 有沒有辦法在不訴諸 javascript 的情況下強制調用 OnFieldChanged() 或終止焦點處理程序?
我認為這很有趣,所以我在 GitHub 的 ASP .NET 核心項目上查看了 Blazor 的InputText
class 的源代碼:
https://github.com/dotnet/aspnetcore/blob/master/src/Components/Web/src/Forms/InputText.cs
您會注意到只有一個事件處理程序,它用於當用戶更改文本框中的值時瀏覽器引發的onchange
事件。
builder.AddAttribute(4, "onchange", EventCallback.Factory.CreateBinder<string>(this, __value => CurrentValueAsString = __value, CurrentValueAsString));
您要訂閱的事件是onblur
,無論用戶是否更改了字段,當用戶單擊或跳出字段時都會引發該事件,並且尚未完成。
我在 InputText 或 InputBase (從 InputText 派生)的任何地方都找不到它,但它在某處,因為這似乎有效:
@page "/"
<InputText @onblur="DoSomething" />
@code
{
private void DoSomething()
{ // Your logic here
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.