Devexpress XAF(Blazor):通过弹出窗口编辑对象属性的实现疑问
XAF中通过Action弹出窗口编辑字符串属性并添加时间戳和用户名
1. 创建临时DTO类
XAF的DetailView需要绑定到对象,因此先定义一个无需持久化的领域组件(DTO)来承载要编辑的备注内容:
using DevExpress.Persistent.Base; [DomainComponent] public class CommentsEditDto { [Size(SizeAttribute.Unlimited)] public string EditComments { get; set; } }
2. 在Action控制器中实现弹窗逻辑
在已创建的控制器里,完成弹窗创建、内容编辑与回调更新的逻辑:
using DevExpress.ExpressApp; using DevExpress.ExpressApp.Actions; using DevExpress.Persistent.Base; public class CommentsEditController : ViewController<ObjectView> { public CommentsEditController() { var editCommentsAction = new SimpleAction(this, "EditComments", PredefinedCategory.Edit); editCommentsAction.Execute += EditCommentsAction_Execute; // 仅在MyBaseClass对象的详情页显示该Action editCommentsAction.TargetObjectType = typeof(MyBaseClass); editCommentsAction.TargetViewType = ViewType.DetailView; } private void EditCommentsAction_Execute(object sender, SimpleActionExecuteEventArgs e) { var currentObj = e.CurrentObject as MyBaseClass; if (currentObj == null) return; // 初始化DTO并赋值当前备注内容 var dto = new CommentsEditDto { EditComments = currentObj.Comments }; // 创建DTO对应的ObjectSpace与DetailView var dtoOs = Application.CreateObjectSpace(typeof(CommentsEditDto)); var dtoInOs = dtoOs.GetObject(dto); var detailView = Application.CreateDetailView(dtoOs, dtoInOs); // 配置弹窗属性 detailView.ViewEditMode = ViewEditMode.Edit; detailView.Caption = "编辑备注"; // 创建弹窗控制器并处理确认回调 var dialogController = Application.CreateController<DialogController>(); dialogController.AcceptAction.Execute += (s, args) => { var editedContent = dtoInOs.EditComments; if (string.IsNullOrEmpty(editedContent)) return; // 拼接用户名与时间戳前缀 var currentUser = SecuritySystem.CurrentUser as YourUserType; // 替换为你的实际用户类 var timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var prefix = $"[{timestamp}] {currentUser.UserName}: "; // 更新原对象的备注字段 var originalOs = View.ObjectSpace; var originalObj = originalOs.GetObject(currentObj); originalObj.Comments = string.IsNullOrEmpty(originalObj.Comments) ? prefix + editedContent : originalObj.Comments + Environment.NewLine + prefix + editedContent; originalOs.CommitChanges(); View.Refresh(); }; // 弹出窗口 Application.ShowViewStrategy.ShowViewInPopupWindow(detailView, dialogController); } }
3. 自定义弹窗编辑器(可选)
如果需要多行文本编辑,可在Model Editor中配置:
- 导航到
BOModel > CommentsEditDto > Views > CommentsEditDto_DetailView > Items > EditComments - 将
EditorType设置为对应平台的多行编辑器:WinForms选WinMemoPropertyEditor,Web选ASPxMemoPropertyEditor
4. 关键注意事项
- 替换代码中的
YourUserType为项目实际的用户业务类(如继承自PermissionPolicyUser的类) - 确保
MyBaseClass的Comments字段标记了[Size(SizeAttribute.Unlimited)],支持多行文本存储 - Web端与WinForms端逻辑一致,仅编辑器类型需对应调整
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

