3

DateTimeのカスタムValidationAttributeを作成しようとしていますか?

しかし、それがヒットしたときIsValid(object value)、値はすでにですDateTime.Max

私のコードで見ることができるものは何もこの値を設定していませんが、それは私がそれを検証するのに苦労していることを意味します。

私が望むルールは「NullまたはAfterToday」です。つまり、Null値がある場合は問題ありませんが、値がある場合は検証します。

public class AfterTodayAttribute : ValidationAttribute, IClientValidatable
{
    public AfterTodayAttribute()
    {
    }

    //Tried this as well...same result
    //protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    //{
    //    return base.IsValid(value, validationContext);
    //}

    public override bool IsValid(object value) 
    {
        //value is already a DateTime and set to DateTime.Max
        var valid = false; // for testing only
        return valid;
    }
}

...
[Display(Description = "Expiry Date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
[AfterToday(false, ErrorMessage = "The Limit Expiry Date must be later than Today")]
public DateTime? NewExpiryDate { get; set; }
...
4

2 に答える 2

1

これでうまくいくはずです:

public override bool IsValid(object value)
{
    var dt = value as DateTime?;

    return dt == null || dt.Value.Date > DateTime.Today.AddDays(1).AddSeconds(-1);
}
于 2012-12-09T08:47:24.083 に答える
0

これを試して :

  public override bool IsValid(object value) 
    {           
        var dateValue = (DateTime ?) value;
        return dateValue.HasValue ? dateValue.Value > DateTime.Now : true;
    }
于 2012-12-09T08:47:48.277 に答える