字符串.数据注释验证属性中的格式

本文关键字:格式 属性 验证 数据 注释 字符串 | 更新日期: 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。好运!