diff --git a/src/BootstrapBlazor/Components/Message/Message.razor.cs b/src/BootstrapBlazor/Components/Message/Message.razor.cs
index e70cfd1667e..4f25bb97256 100644
--- a/src/BootstrapBlazor/Components/Message/Message.razor.cs
+++ b/src/BootstrapBlazor/Components/Message/Message.razor.cs
@@ -133,6 +133,8 @@ public async Task Dismiss(string id)
{
await option.OnDismiss();
}
+ if (option is { DismissMode: MessageDismissMode.DeleteSource })
+ _messages.Remove(option);
}
///
diff --git a/src/BootstrapBlazor/Components/Message/Message.razor.js b/src/BootstrapBlazor/Components/Message/Message.razor.js
index 051ee869ce3..cf45b589fe3 100644
--- a/src/BootstrapBlazor/Components/Message/Message.razor.js
+++ b/src/BootstrapBlazor/Components/Message/Message.razor.js
@@ -46,10 +46,13 @@ export function show(id, msgId) {
clearTimeout(hideHandler);
// remove Id
- msg.items.pop();
+ const rmDom = msg.items.pop();
if (msg.items.length === 0) {
// call server method prepare remove dom
msg.invoke.invokeMethodAsync(msg.callback);
+ } else {
+ const alertId = rmDom.el.id;
+ msg.invoke.invokeMethodAsync('Dismiss', alertId);
}
}, 500);
};
diff --git a/src/BootstrapBlazor/Components/Message/MessageOption.cs b/src/BootstrapBlazor/Components/Message/MessageOption.cs
index 5376a7b1513..134267b3697 100644
--- a/src/BootstrapBlazor/Components/Message/MessageOption.cs
+++ b/src/BootstrapBlazor/Components/Message/MessageOption.cs
@@ -54,4 +54,9 @@ public class MessageOption : PopupOptionBase
/// 获得/设置 消息显示模式,默认为
///
public MessageShowMode ShowMode { get; set; } = MessageShowMode.Multiple;
+
+ ///
+ /// 获得/设置 消息关闭模式,默认为
+ ///
+ public MessageDismissMode DismissMode { get; set; } = MessageDismissMode.OnlyHidden;
}
diff --git a/src/BootstrapBlazor/Enums/MessageShowMode.cs b/src/BootstrapBlazor/Enums/MessageShowMode.cs
index 214c08c8440..a3d5bd7944f 100644
--- a/src/BootstrapBlazor/Enums/MessageShowMode.cs
+++ b/src/BootstrapBlazor/Enums/MessageShowMode.cs
@@ -20,3 +20,18 @@ public enum MessageShowMode
///
Multiple
}
+
+///
+/// 消息关闭模式
+///
+public enum MessageDismissMode
+{
+ ///
+ /// 关闭时仅隐藏原弹窗,保持占位直到所有弹窗均隐藏时一次性清空,这是之前的默认行为
+ ///
+ OnlyHidden,
+ ///
+ /// 关闭时直接删除原弹窗的数据对象,不存在占位
+ ///
+ DeleteSource,
+}
diff --git a/test/UnitTest/Components/MessageTest.cs b/test/UnitTest/Components/MessageTest.cs
index 4879e4cd552..3aafccfc6da 100644
--- a/test/UnitTest/Components/MessageTest.cs
+++ b/test/UnitTest/Components/MessageTest.cs
@@ -133,4 +133,24 @@ await cut.InvokeAsync(() => service.Show(new MessageOption()
ShowMode = MessageShowMode.Single
}, cut.Instance));
}
+
+ [Fact]
+ public async Task DisMissMode_Ok()
+ {
+ var service = Context.Services.GetRequiredService();
+ var cut = Context.RenderComponent();
+ await cut.InvokeAsync(() => service.Show(new MessageOption()
+ {
+ Content = "Test Content",
+ IsAutoHide = false,
+ ShowDismiss = true,
+ Icon = "fa-solid fa-font-awesome",
+ DismissMode = MessageDismissMode.DeleteSource
+ }, cut.Instance));
+ var alert = cut.Find(".alert");
+ Assert.NotNull(alert);
+ Assert.NotNull(alert.Id);
+
+ await cut.Instance.Dismiss(alert.Id);
+ }
}