簡體   English   中英

Blazor EditForm 和 Fluent 驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM