2015-02-05 2 views
3

Я парень на стороне сервера, который пытается научить себя немного CSS, Javascript, jQuery и т. Д. Я написал небольшой тестовый проект, который загружает модель и отображает значения в простых текстовых полях. Работает хорошо, как вы можете видеть:Почему мой ввод даты не читает значение модели?

enter image description here

Но, конечно, я хочу, чтобы отобразить эти даты соответственно. Поэтому позвольте мне изменить эти типы ввода на «дату». Вот код Razor:

@Html.TextBoxFor(m => m.Date, new { @type="date", @id="ondate" }) 

Ну, это сработало .... вроде. Я имею в виду, теперь он отображается как сборщик дат ... но он больше не отображает дату модели!

enter image description here

Что я делаю неправильно?

+2

upvote от меня прекрасные отформатированных скриншоты! :) – DavidG

ответ

1

Атрибут type="date" делает браузеры HTML5 DatePicker. Для того, чтобы это работало правильно, формат должен быть yyyy-MM-dd (формат ISO), поэтому она должна быть

@Html.TextBoxFor(m => m.Date, "{0:yyyy-MM-dd}", new { @type="date" }) 

В качестве альтернативы вы можете установить атрибуты данных на свойстве

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

и использовать

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

, который добавляет атрибут type="date" и использует правильный формат.

Боковые ноты:

  1. DatePicker HTML5 поддерживается только в последних версиях Chrome
  2. Использование EditorFor() (в MVC-4) не позволит вам установить id атрибут, но не ясно, почему вам нужно будет изменить по умолчанию id="Date" для id="ondate"
0

Попробуйте это:

<%= Html.TextBoxFor(m => m.Date, new { @type = "date", @id = "ondate", @value = Model.Date.ToString("mm/dd/yyyy") })%>