You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:06:01