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

如何让MudSelect多选时显示选项文本而非值?

MudSelect多选显示自定义文本的解决方法

方法一:用SelectedValuesTextFunc自定义显示文本(无需修改现有ViewModel属性)

直接给MudSelect添加SelectedValuesTextFunc属性,指定一个方法来把选中的Id集合转换成对应的显示文本:

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

然后在组件的代码部分添加对应的处理方法(注意根据你的Id实际类型调整Cast的类型,比如Id是string就改成Cast<string>):

private string GetSelectedDisplayText(IEnumerable<object> selectedIds)
{
    var selectedUserIds = selectedIds.Cast<int>();
    var selectedUsers = ViewModel.GlobalSalaryAccessUsers.Where(u => selectedUserIds.Contains(u.Id));
    return string.Join(", ", selectedUsers.Select(u => GenerateSalaryAccessUserDisplayString(u)));
}

这个方法会根据选中的Id匹配到对应的用户,再调用你已有的GenerateSalaryAccessUserDisplayString生成文本,最后用逗号拼接成多选后的显示内容。

方法二:绑定实体对象而非Id(需调整ViewModel属性)

如果允许修改ViewModel里的属性类型,把GlobalSalaryAccessUserIds改成存储用户实体的集合(比如IEnumerable<SalaryAccessUser>),可以用ToStringFunc来指定对象的显示文本:

<MudSelect MultiSelection="true" 
           @bind-SelectedValues="ViewModel.Model.GlobalSalaryAccessUsersSelected"
           ToStringFunc="@(user => GenerateSalaryAccessUserDisplayString(user as SalaryAccessUser))">
    @foreach (var salaryAccessUser in ViewModel.GlobalSalaryAccessUsers)
    {
        <MudSelectItem Value="@salaryAccessUser">@GenerateSalaryAccessUserDisplayString(salaryAccessUser)</MudSelectItem>
    }
</MudSelect>

这种方式下,组件会直接用ToStringFunc返回的文本作为选中项的显示内容,不需要额外处理Id转换。

内容的提问来源于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:55:07