diff --git a/src/BootstrapBlazor.Server/Components/Components/Pre.razor.cs b/src/BootstrapBlazor.Server/Components/Components/Pre.razor.cs index a4ec887ae91..ad827cb9cfd 100644 --- a/src/BootstrapBlazor.Server/Components/Components/Pre.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Components/Pre.razor.cs @@ -148,7 +148,7 @@ private string FindCodeSnippetByName(string code) { var regex = new Regex($"([\\s\\S]*?)"); var match = regex.Match(content); - if (match.Success && match.Groups.Count == 2) + if (match is { Success: true, Groups.Count: 2 }) { content = match.Groups[1].Value.Replace("\r\n", "\n").Replace("\n ", "\n").TrimStart('\n'); } diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs index 2cb12d2b983..84febeb66ef 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs @@ -59,6 +59,12 @@ public partial class AutoComplete [Parameter] public bool OnFocusFilter { get; set; } + /// + /// 获得/设置 失去焦点回调方法 默认 null + /// + [Parameter] + public Func? OnBlurAsync { get; set; } + /// /// 获得/设置 匹配时是否忽略大小写,默认为 true /// @@ -145,10 +151,15 @@ protected override void OnParametersSet() /// /// OnBlur 方法 /// - protected void OnBlur() + protected virtual async Task OnBlur() { CurrentSelectedItem = ""; IsShown = false; + + if (OnBlurAsync != null) + { + await OnBlurAsync(Value); + } } /// @@ -239,7 +250,7 @@ public virtual async Task OnKeyUp(string key) } else if (key == "Escape") { - OnBlur(); + await OnBlur(); if (!SkipEsc && OnEscAsync != null) { await OnEscAsync(Value); @@ -256,7 +267,7 @@ public virtual async Task OnKeyUp(string key) } } - OnBlur(); + await OnBlur(); if (!SkipEnter && OnEnterAsync != null) { await OnEnterAsync(Value); @@ -268,7 +279,7 @@ public virtual async Task OnKeyUp(string key) } /// - /// + /// 自定义按键处理方法 /// /// /// diff --git a/test/UnitTest/Components/AutoCompleteTest.cs b/test/UnitTest/Components/AutoCompleteTest.cs index b1acd3277cc..5487061b846 100644 --- a/test/UnitTest/Components/AutoCompleteTest.cs +++ b/test/UnitTest/Components/AutoCompleteTest.cs @@ -294,7 +294,7 @@ public void ValidateForm_Ok() [Fact] public void IsPopover_Ok() { - IEnumerable items = new List() { "test1", "test2" }; + var items = new List() { "test1", "test2" }; var cut = Context.RenderComponent(pb => { pb.Add(a => a.Items, items); @@ -309,4 +309,29 @@ public void IsPopover_Ok() cut.DoesNotContain("data-bs-placement"); cut.Contains("data-bs-custom-class=\"ac-pop-test shadow\""); } + + [Fact] + public async Task OnBlurAsync_Ok() + { + string? val = ""; + var items = new List() { "test1", "test2" }; + var cut = Context.RenderComponent(pb => + { + pb.Add(a => a.Items, items); + pb.Add(a => a.OnBlurAsync, v => + { + val = v; + return Task.CompletedTask; + }); + }); + + // trigger blur + var input = cut.Find("input"); + await cut.InvokeAsync(() => + { + input.Input("123"); + input.Blur(); + }); + Assert.Equal("123", val); + } }