C# 如何获取自定义验证属性以根据情况返回不同的本地化错误消息?
我有一个用于解析日期的自定义验证属性,我希望根据用户弄乱日期的不同方式返回不同的错误消息。我可以在创建属性时设置属性,该属性允许我区分错误消息,但我似乎无法为它们传递本地化字符串 代码如下:C# 如何获取自定义验证属性以根据情况返回不同的本地化错误消息?,c#,C#,我有一个用于解析日期的自定义验证属性,我希望根据用户弄乱日期的不同方式返回不同的错误消息。我可以在创建属性时设置属性,该属性允许我区分错误消息,但我似乎无法为它们传递本地化字符串 代码如下: public sealed class CustomAttribute : ValidationAttribute { public string InvalidDateFormat { get; set; } public string InvalidDateFormatFuture {
public sealed class CustomAttribute : ValidationAttribute
{
public string InvalidDateFormat { get; set; }
public string InvalidDateFormatFuture { get; set; }
public string InvalidDateFormatPast { get; set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// [...]
if (date is invalid)
{
return new ValidationResult(InvalidDateFormat);
}
if (parsed date is too old)
{
return new ValidationResult(InvalidDateFormatPast);
}
if (if date is in the future)
{
return new ValidationResult(InvalidDateFormatFuture);
}
return ValidationResult.Success;
}
}
下面是我如何使用该属性:
[DateValidation(ErrorMessageResourceType = typeof(Language), InvalidDateFormat = nameof(Language.InvalidDateFormat, InvalidDateFormatPast = nameof(Language.InvalidDateFormatPast), InvalidDateFormatFuture = nameof(Language.InvalidDateFormatFuture))]
public string Date { get; set; }
但在尝试此功能时,我只收到消息“InvalidDateFormat”、“InvalidDateFormatPast”、“InvalidDateFormatFuture”
删除(X)的名称会导致以下错误:
属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式
你能在你的自定义属性中使用“语言”吗?@Progman我不能很不幸地告诉你,如何使用你在应用程序启动时初始化的静态属性?那会有用的。。。但似乎效率低下?我必须为我需要的每条消息创建静态属性,这可能是一个很大的问题。将“语言”资源移动到一个新的程序集,并在需要“语言”资源的任何地方引用这个新的程序集作为依赖项怎么样?这将消除使用程序集引用来访问“语言”资源的需要,该资源没有意义或将导致循环引用。