如何做一个自定义验证器来测试两个datetime属性中的一个是否大于另一个
本文关键字:属性 一个 另一个 大于 是否 datetime 两个 验证 测试 何做一 自定义 | 更新日期: 2023-09-27 18:05:54
我有一个名为DateTimeViewModelNullable的类,其中我有一个返回日期时间的方法?
public DateTime? GetDateTime
{
get
{
DateTime date;
if (DateTime.TryParse(Date, CultureInfo.CurrentCulture, DateTimeStyles.None, out date))
{
try
{
return new DateTime(date.Year, date.Month, date.Day, ParseInt(Hour), ParseInt(Minute), 0, DateTimeKind.Utc);
}
catch (ArgumentException)
{
return null;
}
}
return null;
}
}
然后在视图模型中有2个该类型的属性公共DateTimeViewModelNullable DateOut {get;设置;}
[CustomIsValidDate(DateOut.GetDateTime,DateIn.GetDateTime,ErrorMessage = "Returning date must be higher than ingoing date!")]
public DateTimeViewModelNullable DateIn { get; set; }
我需要确保(并为用户打印),如果开始日期大于结束日期,所以我创建了customvalidator,但不工作
public class CustomIsValidDate : ValidationAttribute
{
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
public CustomIsValidDate(DateTime? startDate, DateTime? endDate)
{
StartDate = startDate;
EndDate = endDate;
}
public override bool IsValid(object value)
{
if (StartDate == null || EndDate == null)
return true;
if (EndDate > StartDate)
return true;
return false;
}
}
非静态字段、方法或属性
使用两个datetime?属性,并在此模型上实现System.ComponentModel.DataAnnotations.IValidatableObject,如下所示:
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var validations = new List<ValidationResult>();
if (From.HasValue && Until.HasValue)
{
if (From.Value.Date < Until.Value.Date)
validations.Add(new ValidationResult("StartDateMustBeBeforeEndDate"));
else if (From.Value.Date == From.Value.Date
&& From.Value.Hour < Until.Value.Hour)
validations.Add(new ValidationResult("StartHourMustBeBeforeEndHour"));
else if (From.Value.Date == From.Value.Date
&& From.Value.Hour == Until.Value.Hour
&& From.Value.Minute < Until.Value.Minute)
validations.Add(new ValidationResult("StartMinuteMustBeBeforeEndMinute"));
}
return validations;
}
您在GetDateTime
方法中使用静态变量,您必须删除它。