Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Поле не является датой, даже если оно правильно

Автор вопроса: CezarОтветов: 4

У меня есть DateTimes в модели:

    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:dd/MM/yyyy HH:mm}")]
    public DateTime Start { get; set; }

    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:dd/MM/yyyy HH:mm}")]
    public DateTime End { get; set; }

Если я пишу 25.05.2016 10:00, это говорит о том, что поле Начало/Конец не является датой, но если я пишу 12.05.2016 10:00, это правильно. Первое число соответствует дню (12), второе - месяцу (05), последнее - году (2016), 10 - часам и 00 - минутам, так почему я не могу написать день больше 12?

  • В вашем представлении, как вы отображаете текстовые поля? @Html.EditorFor(model => model.Start)? Grizzly 18.11.2016
  • Используете ли вы средство выбора даты jQuery или какой-либо плагин? Или дату вручную пишете? Grizzly 18.11.2016
  • я пишу вручную Cezar 18.11.2016
  • Если это ошибка проверки на стороне клиента, вам необходимо перенастроить $.validator (см. >этот ответ). Если это ошибка проверки на стороне сервера, вам нужно установить культуру на ту, которая принимает формат dd/MM/yyyy, или создать собственный ModelBinder 18.11.2016
  • Вам нужно предоставить больше информации о том, когда это происходит. 18.11.2016
  • Я думаю, что это на стороне клиента (потому что он не переходит к HttpPost, если номер дня больше 12), но я не кодировал никаких валидаторов на стороне клиента. Если я напишу 12.05.2016, то 12 будет правильным днем, 05 - месяцем, а 2016 - годом, но валидатор не принимает день больше 12. Cezar 19.11.2016

datetimedate-format

Ответы

Ответ 1 · рейтинг 1 · Grizzly

Вместо того, чтобы делать это непосредственно в классе, попробуйте сделать это в представлении.

@Html.EditorFor(model => model.Start, "{0:dd/MM/yyyy HH:mm}")

@Html.EditorFor(model => model.End, "{0:dd/MM/yyyy HH:mm}")

Затем в вашей модели просто выполните:

[DataType(DataType.DateTime)]
public DateTime Start { get; set; }

[DataType(DataType.DateTime)]
public DateTime End { get; set; }

Позвольте мне знать, если это помогает!

Ответ 2 · Michael Kovattil

То, что у вас есть здесь, в приведенном ниже коде, - это просто формат отображения.

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:dd/MM/yyyy HH:mm}")]

Формат даты и времени по умолчанию - ММ/дд/гггг ЧЧ:мм, поэтому на самом деле для даты и времени 12.05.2016 10:00, 12 - месяц, 05 - день и 2016 год.

C# применяет эту проверку, если вы пытаетесь установить дату в другом формате.

И цель формата отображения - отображать указанную дату в формате дд/мм/гггг.

Ответ 3 · Michael Kovattil

DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture); добавьте формат времени HH:mm, если вам нужна и эта информация.

Ответ 4 · Michael Kovattil

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

а это на ваш взгляд:

@Html.EditorFor(x => x.Start)

это должно работать.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы