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

Blazor中父组件向子组件通信:获取子组件输入值的方法

解决Blazor父组件获取子组件输入值的两种方案

针对你的需求,这里提供两种可行的实现方式,适配不同场景:


方案一:通过组件引用直接读取值

这种方式适合简单场景,直接获取子组件的内部状态:

步骤1:修改NewItemComponent,公开输入值

将子组件的CurrentValue设为公开属性,让父组件可以访问:

<!-- NewItemComponent.razor -->
Enter Item Name <input type="text" class="form-control textbox-parameters" @bind="CurrentValue" >

@code { 
    public string CurrentValue { get; set; } = "New Item"; 
}

步骤2:在MainPage中引用子组件并读取值

给子组件添加@ref标记,在保存时直接获取其属性值:

<!-- MainPage.razor -->
<NewItemComponent @ref="newItemComponent"></NewItemComponent> 
<Save OnSaveClick="HandleSaveClick"></Save>

@code {
    private NewItemComponent? newItemComponent;
    
    private void HandleSaveClick()
    {
        // 获取子组件的输入值
        string? itemName = newItemComponent?.CurrentValue;
        // 执行保存逻辑,比如输出或提交到后端
        Console.WriteLine($"保存的项目名称:{itemName}");
    }
}

方案二:通过EventCallback实时同步值(推荐)

这种方式遵循Blazor单向数据流的设计理念,实时将子组件的输入同步到父组件,更适合复杂业务场景:

步骤1:修改NewItemComponent,添加回调参数

定义EventCallback参数,在输入值变化时通知父组件:

<!-- NewItemComponent.razor -->
Enter Item Name <input type="text" class="form-control textbox-parameters" @bind="CurrentValue" >

@code { 
    private string _currentValue = "New Item";
    
    // 定义回调参数,用于向父组件传递值
    [Parameter]
    public EventCallback<string> OnItemNameChanged { get; set; }

    public string CurrentValue
    {
        get => _currentValue;
        set
        {
            if (_currentValue != value)
            {
                _currentValue = value;
                // 通知父组件值已变更
                _ = OnItemNameChanged.InvokeAsync(value);
            }
        }
    }
}

步骤2:在MainPage中接收同步值并使用

维护父组件内部的状态变量,通过回调实时更新,保存时直接使用该变量:

<!-- MainPage.razor -->
<NewItemComponent OnItemNameChanged="UpdateItemName"></NewItemComponent> 
<Save OnSaveClick="HandleSaveClick"></Save>

@code {
    private string currentItemName = "New Item";
    
    // 接收子组件传来的新值,更新父组件状态
    private void UpdateItemName(string newValue)
    {
        currentItemName = newValue;
    }

    private void HandleSaveClick()
    {
        // 直接使用已同步的currentItemName
        Console.WriteLine($"保存的项目名称:{currentItemName}");
    }
}

方案对比

  • 方案一:实现简单,适合快速开发简单功能,但直接访问子组件内部状态,耦合度较高。
  • 方案二:符合Blazor的组件设计原则,单向数据流降低耦合,支持实时响应输入变化,推荐用于大多数业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:33:22