diff --git a/src/BootstrapBlazor.Shared/Samples/Modals.razor.cs b/src/BootstrapBlazor.Shared/Samples/Modals.razor.cs
index 69ce5cd3952fb791873b19d1e2f3fdad0f383254..cc54f5c250794c5fc000e86626fa7955a2ccaf7f 100644
--- a/src/BootstrapBlazor.Shared/Samples/Modals.razor.cs
+++ b/src/BootstrapBlazor.Shared/Samples/Modals.razor.cs
@@ -79,6 +79,13 @@ public sealed partial class Modals
///
private static IEnumerable GetAttributes() => new AttributeItem[]
{
+ new AttributeItem() {
+ Name = "FirstAfterRenderCallbackAsync",
+ Description = "Modal first after render callback",
+ Type = "Func",
+ ValueList = " — ",
+ DefaultValue = " — "
+ },
new AttributeItem() {
Name = "HeaderTemplate",
Description = "Modal body ModalHeader template",
diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj
index 8b3a3145ddb94867a79ca8d67bc44e7f9c8fbec2..8f202b1a651d8c29ccc89e853aa3aa9512c3ac6a 100644
--- a/src/BootstrapBlazor/BootstrapBlazor.csproj
+++ b/src/BootstrapBlazor/BootstrapBlazor.csproj
@@ -1,7 +1,7 @@
- 7.0.5
+ 7.0.6-beta01
diff --git a/src/BootstrapBlazor/Components/Modal/Modal.razor.cs b/src/BootstrapBlazor/Components/Modal/Modal.razor.cs
index f6fb6d5fc20e87c21494cb8a17c753987651f516..f0a6490d1ca0f83edef3dae171c10bb3d523bac2 100644
--- a/src/BootstrapBlazor/Components/Modal/Modal.razor.cs
+++ b/src/BootstrapBlazor/Components/Modal/Modal.razor.cs
@@ -47,12 +47,10 @@ public partial class Modal
public RenderFragment? ChildContent { get; set; }
///
- /// 获得/设置 弹窗已显示时回调此方法
+ /// 获得/设置 组件已经渲染完毕回调方法
///
[Parameter]
- [Obsolete("Call OnShownAsync")]
- [ExcludeFromCodeCoverage]
- public Func? ShownCallbackAsync { get; set; }
+ public Func? FirstAfterRenderCallbackAsync { get; set; }
///
/// 获得/设置 弹窗已显示时回调此方法
@@ -73,6 +71,21 @@ public partial class Modal
private string? KeyboardString => IsKeyboard ? "true" : "false";
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected override async Task OnAfterRenderAsync(bool firstRender)
+ {
+ await base.OnAfterRenderAsync(firstRender);
+
+ if (firstRender && FirstAfterRenderCallbackAsync != null)
+ {
+ await FirstAfterRenderCallbackAsync();
+ }
+ }
+
///
///
///
diff --git a/test/UnitTest/Components/ModalTest.cs b/test/UnitTest/Components/ModalTest.cs
index 9d0c0a57be5b70f90856beb30c74e00bfc3133e3..5ac9d6aef7cc34979da84a9f005d19cf85bf6857 100644
--- a/test/UnitTest/Components/ModalTest.cs
+++ b/test/UnitTest/Components/ModalTest.cs
@@ -97,6 +97,23 @@ public class ModalTest : BootstrapBlazorTestBase
Assert.True(cut.Instance.Value);
}
+ [Fact]
+ public async Task FirstAfterRenderAsync_Ok()
+ {
+ var render = false;
+ var cut = Context.RenderComponent(pb =>
+ {
+ pb.Add(a => a.FirstAfterRenderCallbackAsync, () =>
+ {
+ render = true;
+ return Task.CompletedTask;
+ });
+ pb.AddChildContent();
+ });
+ Assert.True(render);
+
+ }
+
private class MockComponent : ComponentBase
{
public bool Value { get; set; }