Я написал специальный механизм связывания модели, который будет принимать значение двух текстовых полей (содержащих «Дата» и «Время») и создаст объект DateTime из этих двух значений.
Мой ModelBinder запускается, успешно запускается и корректно анализирует входные данные в допустимый DateTime, и когда мое действие вызывается с моделью, свойство StartDateTime
равно ´DateTime.MinValue` вместо того, что было проанализировано вModelBinder.
Моя упрощенная Модель выглядит следующим образом:
[ModelBinder(BinderType = typeof(DateTimeModelBinder))]
[Required]
public DateTime StartDateTime { get; set; }
Это мой ModelBinder , который запускается и работает правильно:
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
throw new ArgumentException(nameof(bindingContext));
var modelName = bindingContext.ModelName;
var dateName = $"{modelName}.Date";
var timeName = $"{modelName}.Time";
string dateValue = TryGetValue(ref bindingContext, dateName); //function omitted for brevity, but it works!
string timeValue = TryGetValue(ref bindingContext, timeName);
bool dateIsValid = DateTime.TryParse(dateValue, out DateTime dateTime);
bool timeIsValid = TimeSpan.TryParse(timeValue, out TimeSpan timeOfDayResult);
if (dateIsValid && timeIsValid)
{
ModelBindingResult.Success(new DateTime(dateTime.Year, dateTime.Month, dateTime.Day,
timeOfDayResult.Hours, timeOfDayResult.Minutes, timeOfDayResult.Seconds));
}
return Task.CompletedTask;
}
И затем, когда я ввожу свое Действие , свойство StartDateTime
не имеет значения, установленного
public IActionResult Detail(ActivityEditModel model)
{
var startTime = model.StartDateTime; //property equals DateTime.MinValue, instead of the parsed value from the model binder above
}