字符串.数据注释验证属性中的格式
本文关键字:格式 属性 验证 数据 注释 字符串 | 更新日期: 2023-09-27 18:16:53
是否有办法使用格式化字符串而不是直接常量来设置数据注释消息,
我需要设置所需的字段ErrorMessage像下面的代码,但它给了我一个错误。
[Required(ErrorMessage = string.Format(SystemMessages.Required, "First Name"))]
public string FirstName { get; set; }
SystemMessages
是一个常量文件,它有如下代码
public const string Required = "{0} is required.";
有这样的设置属性的方法吗?
string.Format
result不是编译时间常数,不能被编译器求值。属性值仅限于
常量表达式、typeof表达式或属性参数类型的数组创建表达式。
更正式地说,您可以在msdn中找到有关限制的描述。格式化字符串不适合以下任何一种:
- 简单类型(bool, byte, char, short, int, long, float,和double) 字符串
- 系统。
- 枚举
- object (object类型的属性参数的参数必须是上述类型之一的常数值)
- 上述任意类型的一维数组
你最多可以试着这样做:
[Required(ErrorMessage = "First Name" + Required)]
public string FirstName { get; set; }
public const string Required = " is required.";
如果您想输出显示名称而不是属性名称,请使用DisplayAttribute
:
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
请使用Validate
方法实现IValidatableObject
。它看起来像:
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var memberNames = new List<string>();
if (string.IsNullOrEmpty(this.FirstName )
{
memberNames.Add("FirstName");
yield return new ValidationResult(string.Format(Resources.Required, "First Name"), memberNames);
}
}
如果不清楚,请阅读IValidatableObject
。好运!