2013-05-30 2 views
11

Я пытаюсь отобразить DateTime поля найденной базы данных froma в моем файле бритвы со следующим:осины MVC EditorFor DateTime не отображая

@Html.EditorFor(model => model.RequestDate); 

Я знаю, что со 100% определенностью RequestDate не нулевая, как я рассмотрел модель, которая была передана в представлении, и это была дата из базы данных. Однако текстовое поле datetime по-прежнему отображает «мм/дд/гггг». Я не знаю, почему он не отображает дату. Есть идеи? Спасибо.

Вот моя модель:

 [Display(Name = "Time")] 
    [DataType(DataType.Date)] 
    public DateTime RequestDate { get; set; } 

EDIT:

[HttpGet] 
    public ActionResult DispatchResponseIndex() 
    { 
     DispatchResponseModel model = new DispatchResponseModel();  


     //if the users session id isnt null then we know they have data related to this form 
     object UserID = Session["TestID"]; 
     if (UserID == null) 
     { 
      return View(model); //default view    
     } 
     else 
     { 
      UserID = Session["TestID"]; 
     } 

     LoadDB(model, (Guid)UserID); 
    //looking at the model here the RequestDate has a valid date of //{5/24/2013 12:00:00 AM} 

     return View(model); 
    } 

EDIT 2:

Если я использую @ Html.TextBox ("Asdasd", модель. Дата заказа); Затем он отобразит сохраненную дату в строчном формате, но мне нужно использовать встроенный редактор даты для текстового поля.

+0

надстройкой ваше действие, чтобы увидеть, что происходит – Jorge

+0

Не могли бы вы немного разобраться? Я использую MVC в течение недели. Я установил RequestDate в свой контроллер и передал его в представление. Этого недостаточно? –

+0

должно быть достаточно, но проверьте свою модель и какую добавленную вами аннотацию она может быть что-то с DisplayFormat. – Jorge

ответ

3

Добавить Формат строки в модели вы

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

Update

ИЛИ

Вы можете изменить модель свойства DateTime в строку. и конвертировать ваш объект datetime в строку !!

ИЛИ

Или вы можете отформатировать это значение в поле вашего редактора .for образец как

@Html.TextBoxFor(model => model.FromDate, "{0:d}") 
+1

Я пробовал это, и он все еще просто отображает «mm/dd/yyyy». Он становится очень странным. Я использую [DataType (DataType.Date)], поэтому у меня может быть встроенный редактор даты. –

+0

Can вы меняете свойство модели datetime на строку и конвертируете свой объект datetime в строку !! –

+0

Если я это сделаю, не потеряю ли редактор даты JQuery? –

12

FINAL

Я идиот. Я понятия не имел, что у Chrome был сборщик дат, который он добавил. Я думал, что это что-то встроенное в MVC. Мне нужно использовать фактический выбор даты jquery. Спасибо всем за всю информацию.

+3

Ты не единственный, только что со мной, и этот комментарий помог мне понять это. – Maxito

+2

Его HTML5 Datepicker, который каждый браузер HTML5 реализует самостоятельно. Иными словами, для Mobile and Desktop тоже, поэтому он является родным для платформы и правильно устанавливает язык. Мне потребовалось некоторое время, чтобы понять, что происходит с этим. Но как только вы знаете, ваш босс. – ppumkin

0

У меня была такая же проблема. Если вы посмотрите на HTTP-сообщение, которое возвращалось к контроллеру, а формат даты в POST - yyyy-MM-dd.

Я поменял аннотацию данных на это, и это сработало ... За исключением того, что теперь в списке индексов показан формат yyyy-mm-dd. И Edit показывает mm/mm/yyyy в элементе управления datepicker?

Добавлен к модели Дата -

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}") 

ИМХО КАЖДЫЙ приложение, которое я видел с 1980 года, используемые даты и времени. Почему это все еще беспорядок?

15

Это похоже на то, чтобы вызвать путаницу и раздражать меня!

Если вы используете DataType.Date вам нужно установить его как

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 

В этом формате, с использованием дефиса. Вы можете попробовать и добавить тег lang, но Chrome будет проверять локальные компьютеры. Формат календаря и этот формат всегда будут заменять что-либо. (Вы должны перезапустить Chrome полностью, если вы измените компьютеры локаль)

<html lang="en-GB"> 

enter image description here

Когда Chrome отображает Date Picker, он будет находиться в правильной локали, компьютеров локали. Мило? Но какой-то контроль был бы хорош! Так или иначе, это работает для меня.

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

enter image description here

+2

Отлично, это сработало для меня. –

+1

К сожалению, это решение также влияет на DisplayFor(), поэтому все ваши даты будут отображаться в этом международном формате. –

0

На самом деле, пока я не видел этот пост, я не понимал, что это «дата выбора» разница между Chrome и IE, хотя я получил макет образец страницы из учебника в MVC в.

Для тех, кто не осознает разницы, как я делал раньше, пожалуйста, найти ниже сравнения:

enter image description here

0

Это, как я могу это сделать внутри модели

[Display(Name = "Effective Date")] 
    [DataType(DataType.Date)] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MMM-yyyy}")] 
    public DateTime? Effectivedate 
    { 
     get { return EffectivedateEdit; } 
     set { EffectivedateEdit = value; EffectivedateEdit = value; } 
    } 


    [DataType(DataType.Date)] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")] 
    public DateTime? EffectivedateEdit { get; set; } 
Смежные вопросы