Witam,
Potrzebuję porównać dwie wartości typu TimeSpan aby sprawdzić czy jedna jest większa od drugiej,
Jednak otrzymuje pewien błąd którego nie rozumiem ponieważ wydaje się że wszystko jest w porządku.
Walidator:
public class IsBigger : ValidationAttribute
{
public string Time { get; private set; }
public IsBigger(string time)
{
Time = time;
}
public override bool IsValid(object value)
{
var properties = TypeDescriptor.GetProperties(value);
var timeValue = (TimeSpan?)(properties.Find(Time, true).GetValue(value));
if (value == null || timeValue == null)
return true;
if (TimeSpan.Compare((TimeSpan)value, (TimeSpan)timeValue) == 1)
return true;
if (TimeSpan.Compare((TimeSpan)value, (TimeSpan)timeValue) == 0)
return true;
return false;
}
}
Klasa w której wykorzystuje walidator:
public class TimeEngineModel
{
[Required]
[DataType(DataType.Time)]
public TimeSpan TimeStart { get; set; }
[Required]
[DataType(DataType.Time)]
[IsBigger("TimeStart", ErrorMessage = "Data końca zajęć musi być większa od początkowej")]
public TimeSpan TimeFinish { get; set; }
}
Błąd otrzymuję przy linii gdzie przypisuje zmienna "var timeValue":
Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.
Gdy przeniosę walidator nad klasę w której stosuję atrybut mojej walidacji, komunikat wyświetla się przy instrukcji
"(TimeSpan.Compare((TimeSpan)value, (TimeSpan)timeValue) == 1)":
Określone rzutowanie jest nieprawidłowe.