У меня есть форма, требующая ввода 2 дат.Один должен быть за другим.У меня есть собственный валидатор, настроенный для этого.Если более поздняя дата недействительна, валидатор сработает и покажет сообщение об ошибке, как и ожидалось.Если дата затем корректируется до действительной, она публикуется на сервере как «01/01/0001».Исправленная дата не попадает на сервер.
Модель:
[Display(Name = "Start")]
public DateTime Start { get; set; }
[Display(Name = "End")]
[CustomTimeRangeEnd(ErrorMessage = "End Date is required and must be a valid date after Start Date")]
public DateTime End { get; set; }
Валидатор:
public class CustomTimeRangeEndAttribute : ModelAwareValidationAttribute
{
static CustomTimeRangeEndAttribute()
{
Register.Attribute(typeof(CustomTimeRangeEndAttribute));
}
public override bool IsValid(object value, object container)
{
var model = (ICustomTimeRange)container;
if (value == null) return false;
DateTime dt;
var validdt = DateTime.TryParse(value.ToString(), out dt);
if (!validdt) return false;
if (dt < model.Start) return false;
return true;
}
Просмотр:
@Html.LabelFor(x => x.Start, new { @class = "control-label" })<br />
<input type="date" name="Start" id="Start" />
@Html.LabelFor(x => x.End, new { @class = "control-label" })<br />
<input type="date" name="End" id="End" />