Ответ 1
[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)]
public TimeSpan? Start { get; set; }
[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)]
public TimeSpan? End { get; set; }
[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)]
public TimeSpan? Pause { get; set; }
Но имейте в виду, что основной целью TimeSpan
является представление измеренной продолжительности времени, а не времени суток. Это означает, что значения TimeSpan
могут быть больше 24 часов. Они также могут быть отрицательными, чтобы представлять перемещение назад на временной шкале.
Допустимо использовать их как время суток и фактически выполняется самой картой (например, DateTime.TimeOfDay
). Но при использовании этого способа вы должны тщательно проверять ввод пользователя. Если вы просто полагаетесь на тип данных, пользователь может ввести значения, которые являются действительными временными интервалами, но не действительными днями. Например, -1.22:33:44
является допустимым TimeSpan
, который представляет собой 1 день, 22 часа, 33 минуты и 44 секунды в прошлом.
Было бы намного проще, если бы .Net имел собственный тип Time
, , но он не. Обновление. В пакете System.Time
теперь есть собственный TimeOfDay
тип, доступный в CoreFXLab.
Кроме того, метод TextBoxFor
не будет собирать аннотацию данных. Вы можете прямо указать строку формата в качестве параметра, например:
@Html.TextBoxFor(x => x.Shifts[i].Start, "{0:hh\\:mm}")
Или вы можете переключиться на EditorFor
следующим образом:
@Html.EditorFor(x => x.Shifts[i].Start)