点击Edit打开BlazoredModal后Context Menu无法关闭的问题
解决SfGrid右键菜单点击Edit后未自动关闭的问题
问题原因
点击Edit选项时,代码中直接等待BlazoredModal的结果(await ModalService.Show<EditRowModal>(...).Result),这种同步等待操作会阻塞上下文菜单的默认关闭流程,导致菜单停留在Modal上方。而Delete和View Details选项中无此类阻塞操作,菜单的默认关闭逻辑能正常执行。
解决方案
通过Grid实例手动调用上下文菜单的关闭方法,确保菜单在打开Modal前先完成关闭。
修改后的代码
确保Grid的@ref="_gridRef"已正确定义(现有代码已包含),然后修改OnContextMenuItemClicked方法:
private async Task OnContextMenuItemClicked(ContextMenuClickEventArgs<ExpandoObject> args) { if (args.RowInfo?.RowData is ExpandoObject rowData && args.Item.Text == "Edit") { Console.WriteLine("Edit action triggered."); // 手动关闭上下文菜单 _gridRef.CloseContextMenu(); // 打开模态框,拆分实例获取与结果等待的逻辑 var parameters = new ModalParameters(); parameters.Add("SelectedItem", rowData); var modalRef = ModalService.Show<EditRowModal>("Edit Row", parameters); // 单独等待模态框结果,避免阻塞菜单关闭流程 var result = await modalRef.Result; // 此处可处理模态框返回的结果,例如更新数据源等 } else if (args.Item.Text == "Delete") { Console.WriteLine("Delete action triggered."); // 实现删除逻辑 } else if (args.Item.Text == "View Details") { Console.WriteLine("View Details action triggered."); // 实现查看详情逻辑 } }
关键改动说明
_gridRef.CloseContextMenu():强制触发Grid上下文菜单的关闭操作,避免被后续Modal的异步操作打断- 拆分模态框操作:先获取
IModalReference实例,再单独等待结果,确保菜单关闭的同步逻辑优先执行
内容的提问来源于stack exchange,提问作者who-aditya-nawandar
相关产品推荐
相关产品推荐

