diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 1d839a367a7..cbab8bfd3b0 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 9.5.6-beta04 + 9.5.6-beta05 diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs index e8f836b7d0b..08680e90f5b 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs @@ -93,6 +93,17 @@ protected override void OnInitialized() base.OnInitialized(); SkipRegisterEnterEscJSInvoke = true; + + Items ??= []; + + if (!string.IsNullOrEmpty(Value)) + { + _filterItems = GetFilterItemsByValue(Value); + if (DisplayCount != null) + { + _filterItems = [.. _filterItems.Take(DisplayCount.Value)]; + } + } } /// @@ -106,8 +117,6 @@ protected override void OnParametersSet() PlaceHolder ??= Localizer[nameof(PlaceHolder)]; Icon ??= IconTheme.GetIconByKey(ComponentIcons.AutoCompleteIcon); LoadingIcon ??= IconTheme.GetIconByKey(ComponentIcons.LoadingIcon); - - Items ??= []; } private bool _render = true; @@ -151,11 +160,7 @@ public override async Task TriggerFilter(string val) } else { - var comparison = IgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; - var items = IsLikeMatch - ? Items.Where(s => s.Contains(val, comparison)) - : Items.Where(s => s.StartsWith(val, comparison)); - _filterItems = [.. items]; + _filterItems = GetFilterItemsByValue(val); } if (DisplayCount != null) @@ -166,6 +171,15 @@ public override async Task TriggerFilter(string val) await TriggerChange(val); } + private List GetFilterItemsByValue(string val) + { + var comparison = IgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; + var items = IsLikeMatch + ? Items.Where(s => s.Contains(val, comparison)) + : Items.Where(s => s.StartsWith(val, comparison)); + return [.. items]; + } + /// /// TriggerChange method /// diff --git a/test/UnitTest/Components/AutoCompleteTest.cs b/test/UnitTest/Components/AutoCompleteTest.cs index 821b5f79eb5..a0c5caaef66 100644 --- a/test/UnitTest/Components/AutoCompleteTest.cs +++ b/test/UnitTest/Components/AutoCompleteTest.cs @@ -40,6 +40,23 @@ public async Task Items_Ok() Assert.Equal("Test", cut.Instance.Value); } + [Fact] + public void Value_Ok() + { + var cut = Context.RenderComponent(pb => + { + pb.Add(a => a.Items, new List() { "test1", "test12", "test123", "test1234" }); + pb.Add(a => a.Value, "test12"); + pb.Add(a => a.DisplayCount, 2); + }); + var menus = cut.FindAll(".dropdown-item"); + + // 由于 Value = test12 + // 并且设置了 DisplayCount = 2 + // 候选项只有 2 个 + Assert.Equal(2, menus.Count); + } + [Fact] public void Debounce_Ok() {