我正在尝试基于给定日期值的一系列值进行限制,使用:
[Range(typeof(DateTime), "1/1/1971", DateTime.Now.AddDays(1).ToString())]
public DateTime date { get; set; }
但是,我得到一个错误,说我不能将变量用于该限制。我怎么能实现这一点呢?
提前致谢!
答案 0 :(得分:1)
由于Attributes期望值为常量,因此您必须实现自定义元数据提供程序。然后,您将动态地注入范围的结束值。
public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
foreach (var attribute in attributes.OfType<RangeAttribute>())
{
if (attribute.OperandType == typeof(DateTime)
{
attribute.Maximum = DateTime.Now.AddDays(1).ToString();
}
}
}
}
另一个选项,如Abbas的回答中所建议的那样,是创建一个自定义验证属性。这些方面的东西:
public class CustomDateRangeAttribute : RangeAttribute
{
public CustomDateRangeAttribute()
{
base();
base.Maximum = DateTime.Now.AddDays(1).ToString();
}
}
答案 1 :(得分:0)
虽然未在RangeAttribute Class或RangeAttribute Constructor (Type, String, String)文档中指定,但构造函数需要常量值。