有没有办法使用格式化字符串而不是直接常量来设置数据注释消息,
我需要像下面的代码一样设置必填字段ErrorMessage,但它给了我一个错误。
[Required(ErrorMessage = string.Format(SystemMessages.Required, "First Name"))]
public string FirstName { get; set; }
SystemMessages
是一个常量文件,它有以下代码,
public const string Required = "{0} is required.";
有没有办法设置这样的属性?
答案 0 :(得分:2)
string.Format
结果不是编译时常量,并且无法由编译器进行评估。属性值仅限于
属性参数类型的常量表达式,typeof表达式或数组创建表达式。
更正式地说,您可以在msdn找到限制说明。格式化字符串不适合它们中的任何一个,它们是:
充其量你可以尝试类似的东西:
[Required(ErrorMessage = "First Name" + Required)]
public string FirstName { get; set; }
public const string Required = " is required.";
答案 1 :(得分:2)
如果要输出显示名称而不是属性名称,请使用DisplayAttribute
:
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
答案 2 :(得分:2)
请实施使用IValidatableObject
方法的Validate
。它看起来像:
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
。祝你好运!