Проблема с проверкой атрибутов модели

Я форматирую поле DateTime? как dd/MM/yyyy, и когда я отправляю форму, отображается ошибка проверки.

введите описание изображения здесь

Я не понимаю, почему это происходит?

Модель

[Display(Name = "Expected Ending Time")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime? ExpectedEndingTime { get; set; }

HTML

@Html.TextBoxFor(x => x.Requsition.ExpectedEndingTime, new { @class = "form-control dataPickerField", id = "ExpectedEndingTimeDataPicker", @readonly = true })

@Html.ValidationMessageFor(x => x.Requsition.ExpectedEndingTime)



<script>
    $(function () {            
        $('#ExpectedEndingTimeDataPicker').datepicker({
            format: 'dd/mm/yyyy',
            autoclose: true           
        })
        .on('changeDate', function (ev) {
              //  do things;
    );
    });
</script>

person DmitryBoyko    schedule 15.01.2014    source источник
comment
если вы введете значение MM / dd / yyyy, будет ли это работать? Если да, то почему-то ваш формат не применяется   -  person Sergey Litvinov    schedule 15.01.2014
comment
Можете ли вы изменить тип ExpectedEndingTime с DateTime на String и проверить, какое значение вы получаете от браузера?   -  person Frank59    schedule 15.01.2014
comment
Возможно, эта проблема связана с использованием значения, допускающего значение NULL.   -  person Travis J    schedule 15.01.2014
comment
Это также может иметь какое-то отношение к настройкам локали в вашем приложении MVC. Вы пытались проверить, действительно ли 01/15/2014?   -  person Greg Burghardt    schedule 15.01.2014
comment
какой DataPicker вы используете?   -  person Sergey Litvinov    schedule 15.01.2014
comment
@ Frank59 Он работает со строкой, но мне нужно DateTime?   -  person DmitryBoyko    schedule 15.01.2014
comment
@GregBurghardt Ну, у меня глобальная настройка: ‹globalization uiCulture = nb-NO culture = nb-NO /›   -  person DmitryBoyko    schedule 15.01.2014
comment
@Clark Kent, вы можете просто использовать DateTime.Parse в этой строке и проверить, какая ошибка вызовет. И после этого исправить   -  person Frank59    schedule 15.01.2014
comment
Когда вы говорите, что он показывает ошибку проверки, это на стороне клиента или после того, как он был отправлен на сервер?   -  person John H    schedule 15.01.2014


Ответы (2)


Я думаю, что DataFormatString используется только для отображения, а ModelBinder не использует его для разбора. Таким образом, ваш сервер по-прежнему использует культуру из web.config.

Вы можете жестко указать конкретную культуру в конфигурации, которая должна использоваться с этим форматом даты.

Вот ответ, который может вам помочь - https://stackoverflow.com/a/8035636/169635 В нем есть образец IModelBinder, который использует CurrentCulture для синтаксического анализа. Вы можете указать собственный формат

person Sergey Litvinov    schedule 15.01.2014
comment
Спасибо за вклад! Я провел небольшое расследование, но наконец нашел другое решение. - person DmitryBoyko; 15.01.2014

Мне ничего не пригодилось, ребята ....

Поэтому я добавил 1 дополнительное поле в Модель и сохраню DateTime как String в нужном мне формате.

А для мест, где мне нужен формат DateTime, у меня есть другое поле.

[Display(Name = "Expected Ending Time")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime? ExpectedEndingTime { get; set; }


[Required]
[Display(Name = "Expected Ending Time")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public string ExpectedEndingTimeAsString { get; set; }  
person DmitryBoyko    schedule 15.01.2014