只需将基于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()或终止焦点处理程序?
答案 0 :(得分:2)
我认为这很有趣,因此我在这里查看了GitHub的ASP .NET Core项目上Blazor的InputText
类的源代码:
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
}
}