2015-07-26 4 views
2

Кажется, что существует очевидная проблема при захвате пользовательского ввода с переднего конца (вид) на задний конец (контроллер), относящийся к форматам даты и времени.Entity Framwork 6 datetime issue

Я искал все и не мог найти решение проблемы, которую я наблюдаю. У меня есть дата-время в базе данных. Моя проблема возникает, когда я вставляю формат даты и времени в текстовый ввод (вручную, а не с помощью datepicker), который, по-видимому, не подходит, поскольку он запрашивает соответствующий формат.

Когда я выбираю соответствующий формат, приложение выходит из строя, и он не может проанализировать формат. Есть ли какие-либо статьи, которые могут помочь мне достичь или понять, как работают форматы datetime и EntityFramework?

+1

C# не сохраняет формат отображения объект типа 'DateTime'. вы должны передать объект DateTime из вашего представления в контроллер (это означает, что вам нужно использовать один из методов анализа даты DateTime в вашем представлении. –

ответ

1

Это работает для меня:

Модель

[Display(Name = "Startdate")] 
[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
public DateTime StartedAt { get; set; } 

Посмотреть

if (!Modernizr.inputtypes.date) { 
    $('input[type=date]').datepicker({ 
     dateFormat: 'yy-mm-dd'});} 
+0

этот вид работает, но я не могу сохранить этот формат со временем, его бросая ошибку при запуске, поскольку я пытаюсь разобрать его. – JJDev

+0

Это, казалось, сработало для меня. Спасибо! – JJDev

1

Нет проблем ни в EF, ни в базе данных. Datetime хранится как датайт в базе данных, а не в каком-либо конкретном строчном формате. Когда вы используете текст для ввода, вы несете ответственность за преобразование его в действительное значение datetime. Рассмотрим 1/2/2015 как строку. Вы можете сказать, что это за дата? Нет, вы не можете. Это может быть 2 января 2015 года или 1 февраля 2015 года. Или рассмотреть 15/1/2015. Это подходящая дата, как 15 января 2015 года для машины, использующей одну из европейских культур, но недействительную дату для культуры США. Вы могли бы предотвратить проблему с самого начала, если вы использовали DateTimePicker, который возвращает значение DateTime, а не строку. Вы можете преобразовать строку в DateTime, как это:

DateTime x; 
DateTime? valueToSendToDatabase = DateTime.TryParse(txtDatetime.Text, 
     CultureInfo.CurrentCulture, 
     DateTimeStyles.None, 
     out x) 
     ? x 
     : (DateTime?)null; 
+0

Это больше или ldss понятно, но не говорит нам, как работать с datetime в многоязычной среде .. у вас есть ссылка на какой-то учебник? – Nikolay

+0

Какая часть непонятна? Вместо CultureInfo.CurrentCulture вы можете использовать любую CultureInfo, которую хотите. CurrentCulture - это простой способ. –

+0

Я имею в виду, это было бы интересно получить общее решение использования DateTime, которое использует атрибут «Формат» (проверьте вопрос). – Nikolay