diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 21b30564569..d251d69ee05 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 9.7.4-beta04 + 9.7.4-beta05 diff --git a/src/BootstrapBlazor/Components/Select/MultiSelect.razor.cs b/src/BootstrapBlazor/Components/Select/MultiSelect.razor.cs index 04b277eae73..3ee34b9abec 100644 --- a/src/BootstrapBlazor/Components/Select/MultiSelect.razor.cs +++ b/src/BootstrapBlazor/Components/Select/MultiSelect.razor.cs @@ -286,6 +286,7 @@ protected override async Task OnClearValue() await base.OnClearValue(); SelectedItems.Clear(); + await SetValue(); } /// @@ -459,7 +460,7 @@ private async Task SetValue() if (OnSelectedItemsChanged != null) { - await OnSelectedItemsChanged.Invoke(SelectedItems); + await OnSelectedItemsChanged(SelectedItems); } _lastSelectedValueString = CurrentValueAsString; diff --git a/src/BootstrapBlazor/Components/Select/Select.razor.cs b/src/BootstrapBlazor/Components/Select/Select.razor.cs index 9756f754d56..8156bc4ee2e 100644 --- a/src/BootstrapBlazor/Components/Select/Select.razor.cs +++ b/src/BootstrapBlazor/Components/Select/Select.razor.cs @@ -406,7 +406,10 @@ protected override async Task OnClearValue() await base.OnClearValue(); SelectedItem = null; - _lastSelectedValueString = ""; + if (OnSelectedItemChanged != null) + { + await OnSelectedItemChanged(new SelectedItem("", "")); + } } private string? ReadonlyString => IsEditable ? null : "readonly"; diff --git a/src/BootstrapBlazor/Components/SelectGeneric/MultiSelectGeneric.razor.cs b/src/BootstrapBlazor/Components/SelectGeneric/MultiSelectGeneric.razor.cs index 096f5352a02..44364099980 100644 --- a/src/BootstrapBlazor/Components/SelectGeneric/MultiSelectGeneric.razor.cs +++ b/src/BootstrapBlazor/Components/SelectGeneric/MultiSelectGeneric.razor.cs @@ -328,6 +328,7 @@ protected override async Task OnClearValue() await base.OnClearValue(); SelectedItems.Clear(); + await SetValue(); } private bool _isToggle; @@ -435,7 +436,7 @@ private async Task SetValue() if (OnSelectedItemsChanged != null) { - await OnSelectedItemsChanged.Invoke(SelectedItems); + await OnSelectedItemsChanged(SelectedItems); } CurrentValue = [.. SelectedItems.Select(i => i.Value)]; diff --git a/src/BootstrapBlazor/Components/SelectGeneric/SelectGeneric.razor.cs b/src/BootstrapBlazor/Components/SelectGeneric/SelectGeneric.razor.cs index 45ae676117b..6a8fceb85d9 100644 --- a/src/BootstrapBlazor/Components/SelectGeneric/SelectGeneric.razor.cs +++ b/src/BootstrapBlazor/Components/SelectGeneric/SelectGeneric.razor.cs @@ -474,6 +474,10 @@ protected override async Task OnClearValue() await VirtualizeElement.RefreshDataAsync(); } SelectedItem = new SelectedItem(default!, ""); + if (OnSelectedItemChanged != null) + { + await OnSelectedItemChanged(SelectedItem); + } } private string? ReadonlyString => IsEditable ? null : "readonly"; diff --git a/test/UnitTest/Components/MultiSelectTest.cs b/test/UnitTest/Components/MultiSelectTest.cs index 4561021c772..e39d6e7f513 100644 --- a/test/UnitTest/Components/MultiSelectTest.cs +++ b/test/UnitTest/Components/MultiSelectTest.cs @@ -690,6 +690,7 @@ public void DefaultVirtualizeItemText_Ok() [Fact] public async Task IsVirtualize_Items_Clearable_Ok() { + IEnumerable? selectedItems = null; var cut = Context.RenderComponent>(pb => { pb.Add(a => a.Items, new SelectedItem[] @@ -703,6 +704,11 @@ public async Task IsVirtualize_Items_Clearable_Ok() pb.Add(a => a.OverscanCount, 4); pb.Add(a => a.IsClearable, true); pb.Add(a => a.ShowSearch, true); + pb.Add(a => a.OnSelectedItemsChanged, items => + { + selectedItems = items; + return Task.CompletedTask; + }); }); // 覆盖有搜索条件时,点击清空按钮 @@ -718,6 +724,8 @@ public async Task IsVirtualize_Items_Clearable_Ok() // 点击 Clear 按钮 var button = cut.Find(".clear-icon"); await cut.InvokeAsync(() => button.Click()); + Assert.NotNull(selectedItems); + Assert.Empty(selectedItems); // 下拉框显示所有选项 items = cut.FindAll(".dropdown-item"); diff --git a/test/UnitTest/Components/SelectGenericTest.cs b/test/UnitTest/Components/SelectGenericTest.cs index 45f0f483979..3d97a375a9b 100644 --- a/test/UnitTest/Components/SelectGenericTest.cs +++ b/test/UnitTest/Components/SelectGenericTest.cs @@ -132,9 +132,15 @@ public void Disabled_Ok() public void IsClearable_Ok() { var val = "Test2"; + string? selectedValue = "Test2"; var cut = Context.RenderComponent>(pb => { pb.Add(a => a.IsClearable, true); + pb.Add(a => a.OnSelectedItemChanged, item => + { + selectedValue = item.Value; + return Task.CompletedTask; + }); pb.Add(a => a.Items, new List>() { new("", "请选择"), @@ -151,6 +157,7 @@ public void IsClearable_Ok() var clearButton = cut.Find(".clear-icon"); cut.InvokeAsync(() => clearButton.Click()); Assert.Null(val); + Assert.Null(selectedValue); // 提高代码覆盖率 var select = cut; diff --git a/test/UnitTest/Components/SelectTest.cs b/test/UnitTest/Components/SelectTest.cs index 748c7be025c..a3c1c9fe164 100644 --- a/test/UnitTest/Components/SelectTest.cs +++ b/test/UnitTest/Components/SelectTest.cs @@ -135,10 +135,16 @@ public void Select_Lookup() [Fact] public async Task IsClearable_Ok() { + var selectedValue = "Test2"; var val = "Test2"; var cut = Context.RenderComponent>(pb => { pb.Add(a => a.IsClearable, true); + pb.Add(a => a.OnSelectedItemChanged, item => + { + selectedValue = item.Value; + return Task.CompletedTask; + }); pb.Add(a => a.Items, new List() { new("", "请选择"), @@ -155,6 +161,7 @@ public async Task IsClearable_Ok() var clearButton = cut.Find(".clear-icon"); await cut.InvokeAsync(() => clearButton.Click()); Assert.Null(val); + Assert.Equal("", selectedValue); // 提高代码覆盖率 var select = cut;