Asp.net mvc 3 验证属性被缓存
我在名为DateRange的自定义验证属性中有以下代码:Asp.net mvc 3 验证属性被缓存,asp.net-mvc-3,validation,custom-attributes,Asp.net Mvc 3,Validation,Custom Attributes,我在名为DateRange的自定义验证属性中有以下代码: private DateTime _minDate = DateTime.Today.AddYears(-100); private DateTime _maxDate = DateTime.MaxValue; // String representation of the Min Date (yyyy/MM/dd) public string Min { get { return
private DateTime _minDate = DateTime.Today.AddYears(-100);
private DateTime _maxDate = DateTime.MaxValue;
// String representation of the Min Date (yyyy/MM/dd)
public string Min
{
get { return FormatDate(_minDate, DateTime.Today.AddYears(-100)); }
set { _minDate = value == "Today" ? DateTime.Today : ParseDate(value, DateTime.Today.AddYears(-100)); }
}
// String representation of the Max Date (yyyy/MM/dd)
public string Max
{
get { return FormatDate(_maxDate, DateTime.MaxValue); }
set { _maxDate = value == "Today" ? DateTime.Today : ParseDate(value, DateTime.MaxValue); }
}
然后,我在元数据中对实体模型的某些属性写入此属性,如下所示:
[DateRange(Max = "Today")]
public string SomeDateProperty { get; set; };
[DateInPast(365)]
public DateTime DateReceived { get; set; }
我在Max属性的getter上设置了断点。我第一次打开视图时,断点被激活,日期时间。今天就到了。视图的后续刷新不会激活断点,并获取旧值。我认为这是缓存验证属性。我的问题是:这是因为缓存吗?如果是,那么如何禁用它?提前感谢自定义属性的构造函数只命中一次,不知道如何关闭任何类型的缓存。在我的场景中,我解决这个问题的方法是只使用“IsValid”方法处理日期计算 我创建了一个date in the past属性,该属性需要日期在过去,但您可以设置过去的有效时间
public class DateInPastAttribute : ValidationAttribute
{
private const string DefaultErrorMessage = "'{0}' must be in the past.";
public int DaysInPastAllowed { get; set; }
public DateInPastAttribute(int daysInPastAllowed)
: base(DefaultErrorMessage)
{
this.DaysInPastAllowed = daysInPastAllowed;
}
public override bool IsValid(object value)
{
if (!(value is DateTime))
{
return true;
}
DateTime maxDate = DateTime.Now;
DateTime minDate = maxDate.AddDays(this.DaysInPastAllowed * -1);
DateTime dateValue = (DateTime)value;
return
minDate <= dateValue &&
dateValue <= maxDate;
}
public override string FormatErrorMessage(string name)
{
return string.Format(CultureInfo.CurrentCulture, this.ErrorMessageString, name);
}
}
这将允许在去年内输入日期。您可以根据需要对其进行修改。是否有更多相关信息?我们遇到了同样的问题。