diff --git a/src/BootstrapBlazor/Components/Select/Select.razor.cs b/src/BootstrapBlazor/Components/Select/Select.razor.cs index 3209f32a4da..7ebddb0dda0 100644 --- a/src/BootstrapBlazor/Components/Select/Select.razor.cs +++ b/src/BootstrapBlazor/Components/Select/Select.razor.cs @@ -264,7 +264,7 @@ private SelectedItem? SelectedRow var item = Rows.Find(i => i.Value == CurrentValueAsString) ?? Rows.Find(i => i.Active) ?? Rows.Where(i => !i.IsDisabled).FirstOrDefault() - ?? GetVirtualizeItem(); + ?? GetVirtualizeItem(CurrentValueAsString); if (item != null) { @@ -376,8 +376,8 @@ protected override bool TryParseValueFromString(string value, [MaybeNullWhen(fal private bool TryParseSelectItem(string value, [MaybeNullWhen(false)] out TValue result, out string? validationErrorMessage) { - SelectedItem = Items.FirstOrDefault(i => i.Value == value) - ?? GetVirtualizeItem(); + SelectedItem = Rows.FirstOrDefault(i => i.Value == value) + ?? GetVirtualizeItem(value); // support SelectedItem? type result = SelectedItem != null ? (TValue)(object)SelectedItem : default; @@ -385,13 +385,14 @@ private bool TryParseSelectItem(string value, [MaybeNullWhen(false)] out TValue return SelectedItem != null; } - private SelectedItem? GetVirtualizeItem() + private SelectedItem? GetVirtualizeItem(string value) { - return OnQueryAsync == null ? null : GetSelectedItem(); - - SelectedItem? GetSelectedItem() => ValueType == typeof(SelectedItem) - ? (SelectedItem)(object)Value - : new SelectedItem(CurrentValueAsString, DefaultVirtualizeItemText ?? CurrentValueAsString); + SelectedItem? item = null; + if (_result.Items != null) + { + item = _result.Items.FirstOrDefault(i => i.Value == value) ?? new SelectedItem(value, DefaultVirtualizeItemText ?? value); + } + return item; } /// diff --git a/test/UnitTest/Components/SelectTest.cs b/test/UnitTest/Components/SelectTest.cs index da97baee2d3..58570fe5621 100644 --- a/test/UnitTest/Components/SelectTest.cs +++ b/test/UnitTest/Components/SelectTest.cs @@ -747,7 +747,7 @@ public async Task IsVirtualize_OnQueryAsync_Clearable_Ok() } [Fact] - public void IsVirtualize_BindValue() + public async Task IsVirtualize_BindValue() { var value = new SelectedItem("3", "Test 3"); var cut = Context.RenderComponent>(pb => @@ -772,24 +772,21 @@ public void IsVirtualize_BindValue() }); }); - cut.InvokeAsync(() => - { - var input = cut.Find(".form-select"); - Assert.Equal("Test 3", input.GetAttribute("value")); - }); - cut.Contains("Test 3"); + var input = cut.Find(".form-select"); + Assert.Null(input.GetAttribute("value")); + var select = cut.Instance; Assert.Equal("3", select.Value?.Value); - cut.InvokeAsync(() => + var item = cut.Find(".dropdown-item"); + await cut.InvokeAsync(() => { - var item = cut.Find(".dropdown-item"); item.Click(); - Assert.Equal("1", value.Value); - - var input = cut.Find(".form-select"); - Assert.Equal("Test1", input.GetAttribute("value")); }); + Assert.Equal("1", value.Value); + + input = cut.Find(".form-select"); + Assert.Equal("Test1", input.GetAttribute("value")); } [Fact]