diff --git a/src/BootstrapBlazor/Components/Button/Button.razor.cs b/src/BootstrapBlazor/Components/Button/Button.razor.cs index 60d91762c6e..3cda232e70b 100644 --- a/src/BootstrapBlazor/Components/Button/Button.razor.cs +++ b/src/BootstrapBlazor/Components/Button/Button.razor.cs @@ -65,24 +65,4 @@ protected virtual async Task OnClickButton() /// /// public ValueTask FocusAsync() => ButtonElement.FocusAsync(); - - /// - /// 处理点击方法 - /// - /// - protected virtual async Task HandlerClick() - { - if (OnClickWithoutRender != null) - { - if (!IsAsync) - { - IsNotRender = true; - } - await OnClickWithoutRender(); - } - if (OnClick.HasDelegate) - { - await OnClick.InvokeAsync(); - } - } } diff --git a/src/BootstrapBlazor/Components/Button/ButtonBase.cs b/src/BootstrapBlazor/Components/Button/ButtonBase.cs index 01646a4cc3a..4e45cfaca51 100644 --- a/src/BootstrapBlazor/Components/Button/ButtonBase.cs +++ b/src/BootstrapBlazor/Components/Button/ButtonBase.cs @@ -231,6 +231,26 @@ protected override async Task OnAfterRenderAsync(bool firstRender) } } + /// + /// 处理点击方法 + /// + /// + protected virtual async Task HandlerClick() + { + if (OnClickWithoutRender != null) + { + if (!IsAsync) + { + IsNotRender = true; + } + await OnClickWithoutRender(); + } + if (OnClick.HasDelegate) + { + await OnClick.InvokeAsync(); + } + } + /// /// 设置按钮是否可用状态 /// diff --git a/src/BootstrapBlazor/Components/Button/LinkButton.cs b/src/BootstrapBlazor/Components/Button/LinkButton.cs index 7538ff1a519..9f56a2d8651 100644 --- a/src/BootstrapBlazor/Components/Button/LinkButton.cs +++ b/src/BootstrapBlazor/Components/Button/LinkButton.cs @@ -5,14 +5,13 @@ using Microsoft.AspNetCore.Components.Rendering; using Microsoft.AspNetCore.Components.Web; -using System; namespace BootstrapBlazor.Components; /// /// LinkButton 组件 /// -public sealed class LinkButton : ButtonBase +public class LinkButton : ButtonBase { /// /// 获得/设置 Url 默认为 # @@ -120,14 +119,19 @@ private RenderFragment AddImage() => builder => private async Task OnClickButton() { - if (OnClickWithoutRender != null) + if (IsAsync) { - await OnClickWithoutRender(); + IsAsyncLoading = true; + IsDisabled = true; } - if (OnClick.HasDelegate) + await HandlerClick(); + + // 恢复按钮 + if (IsAsync) { - await OnClick.InvokeAsync(); + IsDisabled = IsKeepDisabled; + IsAsyncLoading = false; } } } diff --git a/test/UnitTest/Components/LinkButtonTest.cs b/test/UnitTest/Components/LinkButtonTest.cs index b0e9d77b980..9617ab0e530 100644 --- a/test/UnitTest/Components/LinkButtonTest.cs +++ b/test/UnitTest/Components/LinkButtonTest.cs @@ -77,16 +77,22 @@ public void ChildContent_Ok() } [Fact] - public void OnClick_Ok() + public async Task OnClick_Ok() { var click = false; - var cut = Context.RenderComponent(builder => builder.Add(s => s.OnClick, () => click = true)); - - cut.InvokeAsync(() => + var cut = Context.RenderComponent(pb => { - cut.Find("a").Click(); - Assert.True(click); + pb.Add(a => a.IsAsync, true); + pb.Add(s => s.OnClick, async () => + { + click = true; + await Task.Yield(); + }); }); + + var link = cut.Find("a"); + await cut.InvokeAsync(() => link.Click()); + Assert.True(click); } [Fact]