【问题标题】:MudSelect is not showing selected valueMudSelect 未显示所选值
【发布时间】:2022-01-16 11:24:57
【问题描述】:

我遇到了 MultiSelect="true" 的 MudSelect 问题。即使它设置了选定的值,它也不会检查选定的值:

<MudSelect Label="Select Item" SelectAll="true" MultiSelection="true" SelectedValues="@SelectedTestItems" T="@MultiSelectItem" ToStringFunc="@ToString">
    @foreach (MultiSelectItem item in AllItems)
    {
        <MudSelectItem Value="@item" />
    }
</MudSelect>

@code {
    private List<MultiSelectItem> SelectedTestItems = new() {
        new MultiSelectItem{Id = 1, Name = "Test 1"},
    };

    private List<MultiSelectItem> AllItems = new() {
        new MultiSelectItem{Id = 1, Name = "Test 1"},
        new MultiSelectItem{Id = 2, Name = "Test 2"},
        new MultiSelectItem{Id = 3, Name = "Test 3"},
        new MultiSelectItem{Id = 4, Name = "Test 4"},
    };

    private string ToString(MultiSelectItem x)
        => x is null ? string.Empty : $"{x.Name}";

    public class MultiSelectItem
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
} 

我还发布了@github 的详细信息:https://github.com/MudBlazor/MudBlazor/discussions/3532

【问题讨论】:

  • 您应该发布一个try.mudblazor.com sn-p 来重现您的问题。我敢肯定,如果你这样做,它会很快得到解决。

标签: asp.net-core .net-core razor blazor mudblazor


【解决方案1】:

您的问题是您没有覆盖相等比较的必要方法。这是一个基于你的sn-p的解决方案,你可以在线玩:https://try.mudblazor.com/snippet/wYwPbGvKRlGThZsa

MudSelect 在内部使用 HashSet,因此当您使用自定义引用类型作为值时,您必须根据它们的数据确保它们具有 GetHashCodeEquals

<MudSelect Label="Select Item" SelectAll="true" MultiSelection="true" SelectedValues="@SelectedTestItems" T="@MultiSelectItem" ToStringFunc="@ToString">
    @foreach (MultiSelectItem item in AllItems)
    {
        <MudSelectItem Value="@item" />
    }
</MudSelect>

@code {
    private List<MultiSelectItem> SelectedTestItems = new() {
        new MultiSelectItem{Id = 1, Name = "Test 1"},
    };

    private List<MultiSelectItem> AllItems = new() {
        new MultiSelectItem{Id = 1, Name = "Test 1"},
        new MultiSelectItem{Id = 2, Name = "Test 2"},
        new MultiSelectItem{Id = 3, Name = "Test 3"},
        new MultiSelectItem{Id = 4, Name = "Test 4"},
    };

    private string ToString(MultiSelectItem x)
        => x is null ? string.Empty : $"{x.Name}";

    public class MultiSelectItem
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public override bool Equals(object o) {
            var other = o as MultiSelectItem;
            return other?.Id==Id;
        }
        public override int GetHashCode() => Id.GetHashCode();
    }


}

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 2017-08-18
    • 2021-01-25
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    相关资源
    最近更新 更多