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

MudSelect无法绑定默认值:如何将默认值与模型绑定?

MudSelect默认值绑定问题解决方案

核心问题

MudSelect对引用类型(比如你的ModelName)默认使用引用相等性判断,你的defaultValue是新创建的实例,和LoadNames里生成的MudSelectItem中的ModelName实例不是同一个引用,所以组件无法匹配到默认选项。

解决步骤

1. 修复对象相等性判断

有两种方式实现正确的相等判断:

方式一:重写ModelName的Equals和GetHashCode

在ModelName类中添加以下代码,基于唯一标识scid来判断对象相等:

public class ModelName
{
    public int scid { get; set; }
    public string name { get; set; }

    public override bool Equals(object obj)
    {
        return obj is ModelName model && scid == model.scid;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(scid);
    }
}

方式二:给MudSelect指定ValueComparer

如果不想修改ModelName类,可以直接在MudSelect上指定自定义比较器:

<MudSelect T="ModelName" Label="Select Name" @bind-Value="defaultValue"
           ValueComparer="@(EqualityComparer<ModelName>.Create((x,y) => x.scid == y.scid, obj => obj.scid.GetHashCode()))">
    @foreach (var item in LoadNames)
    {
        <MudSelectItem Value="@(new ModelName{ scid = item.scid, name= item.name })">@item.name</MudSelectItem>
    }
</MudSelect>

2. 完成默认值绑定

直接将@bind-Value绑定到你定义的defaultValue即可:

<MudSelect T="ModelName" Label="Select Name" @bind-Value="defaultValue">
    @foreach (var item in LoadNames)
    {
        <MudSelectItem Value="@(new ModelName{ scid = item.scid, name= item.name })">@item.name</MudSelectItem>
    }
</MudSelect>

注意事项

确保LoadNames集合中存在scid=101的项,否则组件无法找到对应的选项,默认值也无法显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:54:56