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

如何将MudSelect绑定到int[]?绑定类型转换报错求助

MudSelect多选绑定int[]字段的错误解决方法

问题代码

<MudSelect T="int" @bind-SelectedValues="ViewModel.Model.GlobalSalaryAccessUserIds" MultiSelection="true">
    @foreach (var salaryAccessUser in ViewModel.GlobalSalaryAccessUsers)
    {
        <MudSelectItem T="int" Value="@salaryAccessUser.Id">@GenerateSalaryAccessUserDisplayString(salaryAccessUser)</MudSelectItem>
    }
</MudSelect>

错误信息

Argument 2: cannot convert from 'Microsoft.AspNetCore.Components.EventCallback<int[]>' to 'Microsoft.AspNetCore.Components.EventCallback'

解决方法

方法1:修改字段类型为IEnumerable(推荐)

MudSelect的SelectedValues属性默认支持IEnumerable<T>类型,将GlobalSalaryAccessUserIds的类型从int[]改为List<int>(或其他实现IEnumerable<int>的类型)即可直接使用双向绑定:

在ViewModel中修改字段定义:

public List<int> GlobalSalaryAccessUserIds { get; set; } = new List<int>();

原MudSelect代码无需修改,保持@bind-SelectedValues绑定即可正常工作。

方法2:手动绑定并转换类型(保留int[])

如果必须保留int[]类型,可拆分双向绑定为SelectedValues和SelectedValuesChanged事件,在事件回调中将IEnumerable<int>转换为int[]:

<MudSelect T="int" 
           SelectedValues="@ViewModel.Model.GlobalSalaryAccessUserIds" 
           SelectedValuesChanged="@(values => ViewModel.Model.GlobalSalaryAccessUserIds = values.ToArray())"
           MultiSelection="true">
    @foreach (var salaryAccessUser in ViewModel.GlobalSalaryAccessUsers)
    {
        <MudSelectItem T="int" Value="@salaryAccessUser.Id">@GenerateSalaryAccessUserDisplayString(salaryAccessUser)</MudSelectItem>
    }
</MudSelect>

原因说明

错误源于类型不匹配:@bind-SelectedValues语法糖生成的EventCallback<int[]>与MudSelect期望的EventCallback<IEnumerable<int>>无法直接转换。上述两种方法分别通过适配字段类型、手动转换值的方式解决了这一问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:42:35