You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor中onkeydown与onclick行为不一致问题求助

Blazor输入框按Enter添加内容滞后/为空的问题解决

问题根源在于**@bind默认的绑定触发时机是onchange事件**:当你按下Enter键时,@onkeydown事件会先于输入框的内容同步到绑定变量tag执行,此时tag还是上一次的旧值(首次就是初始空字符串),所以调用addTag()时添加的不是当前输入的内容,导致出现滞后或为空的情况。而点击Add按钮正常,是因为按钮点击时输入框已失去焦点,onchange事件已触发,tag已经同步了最新内容。

解决方案一:修改绑定的触发时机为实时同步

将输入框的绑定事件改为oninput,这样输入框内容会实时同步到tag变量,按下Enter时就能获取到最新值:

<input placeholder="Enter tag" @bind=@tag @bind:event="oninput" @onkeydown="enter"/>

解决方案二:直接获取输入框的当前值

给输入框添加@ref引用,在回车事件中直接读取输入框的实时值,再同步到tag:

<input @ref="tagInput" placeholder="Enter tag" @bind=@tag @onkeydown="enter"/>

对应的@code部分修改:

private ElementReference tagInput;
private string tag;
private List<string> tags = new List<string>();

// 其他方法不变,修改enter方法
private async Task enter(KeyboardEventArgs e)
{
    if (e.Code == "Enter")
    {
        var currentValue = await tagInput.GetValueAsync();
        tag = currentValue;
        addTag();
    }
}

内容的提问来源于stack exchange,提问作者user1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 11:10:26