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我不能很不幸地告诉你,如何使用你在应用程序启动时初始化的静态属性?那会有用的。。。但似乎效率低下?我必须为我需要的每条消息创建静态属性,这可能是一个很大的问题。将“语言”资源移动到一个新的程序集,并在需要“语言”资源的任何地方引用这个新的程序集作为依赖项怎么样?这将消除使用程序集引用来访问“语言”资源的需要,该资源没有意义或将导致循环引用。