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 Core 项目上查看了 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
}
}
只需将基于 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 Core 项目上查看了 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
}
}