我创建了以下自定义 ValidationAttribute:
public class DateRangeAttribute : ValidationAttribute, IClientValidatable {
public DateTime MinimumDate = new DateTime(1901, 1, 1);
public DateTime MaximumDate = new DateTime(2099, 12, 31);
public DateRangeAttribute(string minDate, string maxDate, string errorMessage) {
MinimumDate = DateTime.Parse(minDate);
MaximumDate = DateTime.Parse(maxDate);
ErrorMessage = string.Format(errorMessage, MinimumDate.ToString("MM/dd/yyyy"), MaximumDate.ToString("MM/dd/yyyy"));
}
}
我想在我的 MVC4 视图模型中使用如下:
[DateRange(Resources.MinimumDate, Resources.MaximumDate, "Please enter a date between {0} and {1}")]
资源是基于存储在 SQL 数据库中的一组选项生成的资源类。上述两个资源属性的生成代码的简化版本是:
public class Resources {
public const string MinimumDate = "PropMinimumDate";
public static string PropMinimumDate
{
get { return "12/15/2010" }
}
public const string MaximumDate = "PropMaximumDate";
public static string PropMaximumDate
{
get { return "12/15/2012" }
}
}
虽然我不明白它是如何工作的,但我明白 ValidationAttributes 中资源的典型使用会自动将Resources.MinimumDate映射到PropMinimumDate并返回值“12/15/2010”。
我不知道如何自己手动进行编程飞跃,以便我可以将两个日期值传递到我的自定义 ValidatorAttribute 中。按照目前的编码,“PropMinimumDate”和“PropMaximumDate”是传递给 DateRangeAttribute 构造函数的minDate和maxDate参数值(分别)。
如果我尝试
[DateRange(Resources.PropMinimumDate, Resources.PropMaximumDate, "Please enter a date between {0} and {1}")]
我收到编译错误:
属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式
有没有办法完成这项任务,还是我在尝试不可能的事情?