我正在使用数据注释来验证我的类属性。出现了将验证错误消息存储在外部文件中的要求,在运行时它们将从中加载到内存中。
我以为我能够从XML文件中加载一组错误消息,然后设置ErrorMessage:= [StringVariableHere] ...但显然这不能正常工作使用常数值。
如果我将错误消息存储在Resource.resx文件中,那么这些错误消息将被编译到项目中,并且无法在运行时加载 - 或者我错了吗?
有人可以告诉我一个解决方案吗?
答案 0 :(得分:2)
您可以派生数据注释属性并为消息提供自己的来源。
public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
private string _displayName;
public RequiredAttribute()
{
ErrorMessageResourceName = "Validation_Required";
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
_displayName = validationContext.DisplayName;
return base.IsValid(value, validationContext);
}
public override string FormatErrorMessage(string name)
{
//LOOK HERE! ;)
var msg = GetTheTextHereFromYourSource();
return string.Format(msg, _displayName);
}
}
我在博客中描述了这种技术(我的目标是获取本地化的错误消息,但概念是相同的):http://blog.gauffin.org/2010/11/simplified-localization-for-dataannotations/