Blazor输入:onblur抛出,oninput工作正常 @代码 { 公共字符串Input1{get;set;} 公共字符串Input2{get;set;} }

Blazor输入:onblur抛出,oninput工作正常 @代码 { 公共字符串Input1{get;set;} 公共字符串Input2{get;set;} },blazor,blazor-server-side,Blazor,Blazor Server Side,可以在第一个输入中输入文本,但一旦第二个输入失去焦点,就会引发此异常 System.ArgumentException:类型为的对象 “Microsoft.AspNetCore.Components.Web.FocusEventArgs”不能为空 已转换为类型“Microsoft.AspNetCore.Components.ChangeEventArgs” 这感觉就像是框架,而不是我。有什么想法吗 我正在使用.net 5.0中的blazor服务器。复制并测试此代码: <input type

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

System.ArgumentException:类型为的对象 “Microsoft.AspNetCore.Components.Web.FocusEventArgs”不能为空 已转换为类型“Microsoft.AspNetCore.Components.ChangeEventArgs”

这感觉就像是框架,而不是我。有什么想法吗


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

复制并测试此代码:

<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; }
}
@消息
@代码
{
私有字符串消息;
公共字符串Input1{get;set;}
公共字符串Input2{get;set;}
}
没问题

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


实际上,您告诉编译器,它应该生成将输入标记绑定到变量Input2的代码,绑定应该在调用
blur
事件时发生,但遗憾的是,绑定是在调用“change”事件时执行的。为了执行绑定,框架需要
ChangeEventArgs
参数,但它会得到
FocusEventArgs
参数。如果你是框架,你会怎么做。她对你很好。只有一点声明。

有理由使用onblur进行绑定吗?默认的onchange无论如何都会被触发?所以关键是FocusEventArgs没有value属性,因此DOM和JS上的抽象正在泄漏。框架不能仅仅从阴影后面提取值,还是完全不知道?我更喜欢它是否在代码分析器中生成编译时警告。无论如何,我想我可以使用oninput获取(缺少)数据,然后捕获onblur。我试图解决的实际问题是,当跳过一个必填字段时(例如,将其输入到tabbed out中),我希望捕获该字段。
<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; }

}