Asp.net mvc 3 验证属性被缓存

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

我在名为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 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);
    }
}

这将允许在去年内输入日期。您可以根据需要对其进行修改。

是否有更多相关信息?我们遇到了同样的问题。