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]