XAF Blazor成功保存记录后弹出提示消息代码不生效如何解决
问题原因及修复方案
你当前代码有三个核心问题导致无法生效:
- 控制器没有配置全局生效规则,默认只会匹配特定类型视图
- 选择了错误的
ObjectSpace事件:Committing是事务提交前触发,此时事务未完成,且Blazor UI上下文此时无法正确渲染通知 - 多余的
IsCommitting判断逻辑会干扰通知触发
修复步骤
1. 配置控制器全局生效
在控制器构造函数中添加全局匹配规则,让所有视图都会激活该控制器:
public MessageSavedSuccessfullyViewController() { InitializeComponent(); // 匹配所有类型的视图(列表/详情等) TargetViewType = ViewType.Any; // 不限制绑定的业务对象类型 TargetObjectType = null; // 同时激活根视图和嵌套视图 TargetViewNesting = Nesting.Any; }
2. 替换为正确的提交后事件
把订阅的Committing事件换成Committed事件,该事件会在事务提交成功完成后触发,保证只有保存成功才弹提示。
3. 清理冗余逻辑
移除不必要的IsCommitting判断,Committed事件触发时默认已经完成提交操作,额外增加判断反而可能阻止通知触发。
完整可用代码
public partial class MessageSavedSuccessfullyViewController : ViewController { public MessageSavedSuccessfullyViewController() { InitializeComponent(); // 全局生效配置 TargetViewType = ViewType.Any; TargetObjectType = null; TargetViewNesting = Nesting.Any; } protected override void OnActivated() { base.OnActivated(); // 替换为提交成功后触发的Committed事件 View.ObjectSpace.Committed += ObjectSpace_Committed; } protected override void OnDeactivated() { View.ObjectSpace.Committed -= ObjectSpace_Committed; base.OnDeactivated(); } private void ObjectSpace_Committed(object sender, EventArgs e) { // 仅当有修改被提交时才弹提示,避免无修改点保存也弹通知 if (View.ObjectSpace.GetObjectsToSave().Count > 0) { MessageOptions options = new MessageOptions(); options.Duration = 2000; options.Message = "记录保存成功"; options.Type = InformationType.Success; options.Web.Position = InformationPosition.Right; options.Win.Caption = "操作成功"; options.Win.Type = WinMessageType.Toast; Application.ShowViewStrategy.ShowMessage(options); } } }
额外检查项
如果修改后仍不生效,确认以下配置:
- 该控制器所在的模块已经被添加到你Blazor应用的模块依赖列表中
- Blazor项目未禁用Toast通知功能,默认配置下该功能是开启状态
内容的提问来源于stack exchange,提问作者M.Bouabdallah
相关产品推荐
相关产品推荐

