首页 > 解决方案 > Blazor 输入:onblur 抛出,oninput 工作正常

问题描述

<input type="text" @bind-value="Input1" @bind-value:event="oninput" />
<input type="text" @bind-value="Input2" @bind-value:event="onblur" />

@code
{
    public string Input1 { get; set; }
    public string Input2 { get; set; }
}

可以在第一个输入中输入文本,但是一旦第二个输入失去焦点,就会引发此异常。

System.ArgumentException:“Microsoft.AspNetCore.Components.Web.FocusEventArgs”类型的对象无法转换为“Microsoft.AspNetCore.Components.ChangeEventArgs”类型。

这感觉就像是框架而不是我。有任何想法吗?

我在 .net 5.0 中使用 blazor 服务器。

标签: blazorblazor-server-side

解决方案


复制并测试此代码:

<div>@message</div>
<input type="text" @bind-value="Input1" @bind-value:event="oninput" />
<input type="text" @bind-value="Input2" @onblur="@((args) => message= "The bulr event was fired." )" />

@code
{
    private string message;
    public string Input1 { get; set; }
    public string Input2 { get; set; }

}

没有任何问题。

当您使用这样的代码时: @bind-value="Input2" @bind-value:event="onblur"

您实际上告诉编译器它应该生成将输入标记绑定到变量 Input2 的代码,并且该绑定应该在blur调用事件时发生,但是不幸的是,绑定是在调用“更改”事件时执行的。为了执行绑定,框架需要ChangeEventArgs参数,但它获取的是FocusEventArgs参数。如果你是框架,你会怎么做。她对你很好。只是小小的抗议。


推荐阅读