MudBlazor下拉框MudSelect无法默认选中数据库存储值如何解决
问题原因
- 绑定属性冲突:
MudSelect的@bind-Value是单选场景专用属性,@bind-SelectedValues是多选场景专用属性,二者不可同时绑定。同时绑定后组件会优先执行多选逻辑,而你代码中初始化hashBookTypes时直接赋值为全量图书类型集合,没有匹配BookRequestVM中已有的选中值,组件自然无法正确加载默认选中项。 - 引用类型匹配失败:
BookType是自定义的引用类型,MudSelect默认通过内存引用地址判断两个对象是否相等。你从数据库查询得到的BookRequestVM.BookType实例,和GetBookTypes接口返回的同值实例属于不同的内存对象,哪怕二者的BookTypeId、TypeTitle属性完全一致,组件也无法识别为同一个选项,匹配失败后就会默认选中下拉列表的第一个选项。
修复方案
如果当前业务为单选场景(每份申请仅对应一个图书类型):
- 删除
MudSelect上的@bind-SelectedValues="hashBookTypes"属性,仅保留@bind-Value绑定 - 新增
EqualityComparer参数指定匹配规则,避免引用判断问题,修改后的组件代码如下:
<MudSelect T="BookType" Label="Book Type" @bind-Value="@BookRequestVM.BookType" Required="true" EqualityComparer="@(EqualityComparer<BookType>.Create((x, y) => x?.BookTypeId == y?.BookTypeId))"> @foreach (var selectItem in BookTypes) { <MudSelectItem Value="@selectItem">@selectItem.TypeTitle</MudSelectItem> } </MudSelect>
如果当前业务为多选场景(每份申请可对应多个图书类型):
- 删除
MudSelect上的@bind-Value="@BookRequestVM.BookType"属性,仅保留@bind-SelectedValues绑定 - 初始化
hashBookTypes时,不要直接赋值全量集合,改为筛选出BookRequestVM关联的图书类型添加到集合中,同时同样需要配置EqualityComparer参数解决引用匹配问题。
内容的提问来源于stack exchange,提问作者LOL. NO.
相关产品推荐
相关产品推荐

