Blazor中可通过TaskCompletionSource实现异步确认对话框,无需JS互操作;新建ConfirmService管理状态并暴露Show方法,调用方await即可等待用户选择,UI层用条件渲染和CSS实现弹窗。

Blazor 中没有内置的确认对话框(如 JavaScript 的 confirm()),但可以通过组件化方式轻松实现一个可复用、支持异步等待的确认对话框。核心思路是:用一个状态管理弹窗显示/隐藏,配合回调或 TaskCompletionSource 实现“等待用户点击确定/取消”的同步语义。
用 TaskCompletionSource 实现真异步确认
这是最推荐的方式,让调用方像写 await ShowConfirm("删除?") 一样自然。
- 新建一个
ConfirmService.razor(作为服务组件,通常放在Shared/下) - 内部维护一个
TaskCompletionSource<bool></bool>,暴露Show(string title, string message)方法 - 点击“确定”时
.SetResult(true),点击“取消”时.SetResult(false) - 在父组件中注入该服务,调用
await confirmService.Show(...)即可阻塞后续逻辑直到用户选择
在页面中使用示例
比如在某个按钮点击事件里:
@inject ConfirmService ConfirmService
<p>@code {
private async Task HandleDelete()
{
bool confirmed = await ConfirmService.Show("确认删除", "此操作不可撤销,确定要删除吗?");
if (confirmed)
{
// 执行删除逻辑
}
}
}登录后复制
UI 层:用 Dialog 或简单 p 实现弹窗
确认对话框 UI 可以用 Blazor Server / WebAssembly 原生 DOM 操作,更推荐用 CSS + 条件渲染(@if (isVisible)):
标签: css javascript java js ai c# 点击事件 绝对定位 red
还木有评论哦,快来抢沙发吧~