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

Blazor自定义组件双向绑定问题:父组件无法获取输入值

解决Blazor自定义组件双向绑定不更新父组件值的问题

你的问题根源是自定义组件没有实现Blazor双向绑定要求的回调机制。Blazor的@bind-*语法需要组件提供对应的*Changed回调事件,用来通知父组件更新绑定的值。你的组件只更新了内部的TextValue,但没触发回调通知父组件,所以父组件的TestValue一直停留在初始值。

修改自定义组件LabeledTextInput:

需要添加TextValueChanged回调参数,并在值变更时触发它:

<div style="display: inline-block;">
    <label for="@InputId">@LabelText</label>&nbsp;
    <input id="@InputId" @bind-value="TextValue" @bind-value:event="oninput" />
</div>

@code {
    [Parameter]
    public string InputId { get; set; } = string.Empty;

    [Parameter]
    public string LabelText { get; set; } = string.Empty;

    [Parameter]
    public string TextValue { get; set; } = string.Empty;

    // 双向绑定必须的回调参数,命名规则:属性名+Changed
    [Parameter]
    public EventCallback<string> TextValueChanged { get; set; }
}

关键说明:

  1. 添加EventCallback<string> TextValueChanged参数:这是Blazor双向绑定的约定,当父组件使用@bind-TextValue时,框架会自动把父组件的属性更新逻辑绑定到这个回调上。
  2. 简化input绑定:用@bind-value:event="oninput"替代手动编写@oninput,Blazor会自动处理值更新并触发TextValueChanged回调,无需自己写额外的回调方法。如果坚持手动处理逻辑,可保留原回调并加上await TextValueChanged.InvokeAsync(TextValue)触发通知。

父组件代码无需修改:

你原来的父组件使用@bind-TextValue="TestValue"的写法是正确的,修改完自定义组件后,点击按钮就能输出用户输入的实际值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:06:04