【问题标题】:Blazor EditForm and Fluent ValidationBlazor EditForm 和 Fluent 验证
【发布时间】:2020-07-27 05:23:57
【问题描述】:

只需基于 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() 处理程序不会触发......(该字段没有改变并不奇怪)。有没有一种方法可以强制调用 OnFieldChanged() 或终止焦点处理程序而不使用 javascript?

【问题讨论】:

    标签: c# blazor fluentvalidation


    【解决方案1】:

    我觉得这很有趣,所以我在这里查看了 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
        }
    }
    

    【讨论】:

    • 太好了,我会检查一下,谢谢你的帮助本杰明
    • 很高兴能帮上忙。如果有效,请将其标记为答案。如果没有,请告诉我,我会再为您考虑!
    • 我又看了一遍,上面的答案改了。
    猜你喜欢
    • 2020-06-06
    • 2020-10-26
    • 2020-10-14
    • 1970-01-01
    • 2020-06-16
    • 2021-06-16
    • 1970-01-01
    • 2022-11-18
    • 2023-02-22
    相关资源
    最近更新 更多