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

Blazor WASM FluentUI中FluentSelect回调无法获取枚举选中值

Blazor WASM中FluentUI FluentSelect回调无法获取选中枚举值

问题场景

使用FluentUI 4.10.3版本的FluentSelect组件,泛型类型指定为可空枚举EnumOption?,通过SelectedOptionChanged触发回调函数,但每次选中选项后,回调中传入的值始终为null,而非预期的选中枚举项(默认值为null是正常的)。

原组件代码:

<FluentSelect TOption="EnumOption?" SelectedOptionChanged="OnEnumOptionChanged">
    <FluentOption Value="@EnumOption.Blue.ToString()">Blue</FluentOption>
    <FluentOption Value="@EnumOption.Red.ToString()">Red</FluentOption>
    <FluentOption Value="@EnumOption.Green.ToString()">Green</FluentOption>
</FluentSelect>

原回调函数代码:

private void OnRedactOptionChanged(EnumOption? enumOption)
{
    // enumOption is null not the selected value
    Logger.LogInformation("Selected option {EnumOption}", enumOption);
}

问题原因

FluentSelect的泛型类型是EnumOption?,但子组件FluentOption的Value传递的是枚举的字符串表示,组件无法自动完成字符串到枚举类型的转换,导致回调无法正确接收选中值。另外回调函数名存在拼写错误:OnRedactOptionChanged与组件绑定的OnEnumOptionChanged不匹配。

解决方案(不使用bind)

方案1:直接传递枚举值(推荐)

调整FluentOption的Value为枚举本身,确保类型与FluentSelect的泛型参数匹配:

修改后的组件代码:

<FluentSelect TOption="EnumOption?" SelectedOptionChanged="OnEnumOptionChanged">
    <FluentOption Value="@EnumOption.Blue">Blue</FluentOption>
    <FluentOption Value="@EnumOption.Red">Red</FluentOption>
    <FluentOption Value="@EnumOption.Green">Green</FluentOption>
</FluentSelect>

修正后的回调函数:

private void OnEnumOptionChanged(EnumOption? enumOption)
{
    Logger.LogInformation("Selected option {EnumOption}", enumOption);
}

方案2:使用字符串值并手动转换(若必须用字符串)

如果业务场景要求FluentOption传递字符串值,可以将FluentSelect的泛型类型改为string?,然后在回调中手动将字符串转换为枚举:

组件代码:

<FluentSelect TOption="string?" SelectedOptionChanged="OnEnumOptionChanged">
    <FluentOption Value="@EnumOption.Blue.ToString()">Blue</FluentOption>
    <FluentOption Value="@EnumOption.Red.ToString()">Red</FluentOption>
    <FluentOption Value="@EnumOption.Green.ToString()">Green</FluentOption>
</FluentSelect>

回调函数:

private void OnEnumOptionChanged(string? selectedValue)
{
    if (!string.IsNullOrEmpty(selectedValue) && Enum.TryParse<EnumOption>(selectedValue, out var enumOption))
    {
        Logger.LogInformation("Selected option {EnumOption}", enumOption);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:31:08