.NET Core DateTime?Поле ModelState недопустимо, если ноль - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть поле, объявленное в моей модели:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? dataCreazione { get; set; }

в представлении я отображаю поле с помощником:

@Html.EditorFor(m => m.dataCreazione )

И когда я отправляю форму с dataCreazione null (через js - форма сериализации), при отладке я вижу значение поля dataCreazione null (правильное) в методе контроллера, но недопустимо ModelState с сообщением («dataCreazione должен быть отформатирован .....»).

Почему проверка на обнуляемый DateTime?Как я могу избежать этого?Я хочу иметь возможность отправлять DateTime null без того, чтобы сделать состояние модели недействительным.

Редактировать: Я отправляю форму через js с:

$.post(this.form.attr('action'), this.form.serialize(), function (data) {
    if (data.url == null) {
        _this.modal.find('.modal-content').empty();
        _this.modal.find('.modal-content').html(data);
        _this.bindEvents();
    } else {
        window.location.href = data.url;
    }
});

Если я распечатаю form.serialize (), я вижу, что параметр будетотправить данныеCreazione =.В другой точке приложения я отправляю форму с нулевой датой через HTTP GETP, а на стороне сервера datetime инициализируется 01.010001 (и действительное состояние модели).

Я просто не жалуюсь, почему не могуотправьте нулевое значение datetime и получите неверное состояние модели.

1 Ответ

0 голосов
/ 19 мая 2019

Я только что столкнулся с этой проблемой сейчас на .net Core 2.2 (Мой проект мог быть фактически создан в 2.1 в прошлом году, когда был задан этот вопрос).

Решением для меня было изменение *Опция 1003 *, созданная мной вне помощника тега (без значения):

<option>Please select one</option>

Быть:

<option value="">Please select one</option>

Это не было очевидно, так как значение null былопередан обратно в контроллер, который должен быть действительным.Это было видно только в форме ошибки:

Значение "Пожалуйста, выберите один" недопустимо для ...

Теперь при отладке модель возвращается кконтроллер выглядит так же (согласно VS2017), но ModelState.IsValid оценивается в true и все работает как положено.

...