如何将ObservableValidator的GetErrors()结果转为可读字符串?
解决ObservableValidator错误信息可读性问题
GetErrors()方法返回的是IEnumerable<ValidationResult>类型的集合,直接弹窗显示会因为默认的对象ToString()输出导致内容不可读。你只需要提取集合中每个ValidationResult的ErrorMessage字段,再拼接成易读的字符串即可。
单个属性错误转换示例
以dbOwner为例,在SaveDb命令中做如下处理:
// 触发全属性验证 ValidateAllProperties(); // 获取dbOwner对应的错误集合 var ownerErrors = GetErrors(nameof(dbOwner)); // 将错误消息拼接为换行分隔的字符串 var readableError = string.Join(Environment.NewLine, ownerErrors.Select(result => result.ErrorMessage)); // 弹窗显示友好提示 MessageBox.Show(readableError, "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
所有属性错误批量转换示例
如果需要一次性展示所有属性的验证错误,可以传入空字符串获取全局错误,同时标注对应的属性名:
ValidateAllProperties(); // 获取所有属性的错误集合 var allErrors = GetErrors(string.Empty); // 拼接带属性名的友好提示 var readableErrors = string.Join(Environment.NewLine, allErrors.Select(result => $"【{result.MemberNames.FirstOrDefault() ?? "未知属性"}】{result.ErrorMessage}" ) ); MessageBox.Show(readableErrors, "验证失败");
优化:自定义验证提示文本
默认的验证提示比较生硬,你可以直接在验证特性中自定义友好的错误消息,进一步提升可读性:
[Required(ErrorMessage = "数据库所有者名称不能为空")] [MinLength(3, ErrorMessage = "数据库所有者名称长度不能少于3个字符")] public string dbOwner { get; set; } [EmailAddress(ErrorMessage = "请输入有效的数据库联系人邮箱")] [Required(ErrorMessage = "数据库联系人邮箱不能为空")] public string dbEmail { get; set; } [MinLength(6, ErrorMessage = "数据库密码长度不能少于6位")] public string dbPasswd { get; set; }
内容的提问来源于stack exchange,提问作者user22995906
相关产品推荐
相关产品推荐

