2015-11-24 2 views
1

У меня есть модель TimeSpan, которую я пытаюсь отобразить в представлении (@ Html.EditorFor) с замаскированным форматом mm: ss (продолжительность измеряется в минутах и ​​секундах) , Я НЕ хочу/нуждаюсь в часах или AM/PM, но мой вид без исключения отображает маску = "-: - -", которая является форматом по умолчанию "hh: ss tt". Я не могу заставить его отображать ЛЮБЫЕ ДРУГИЕ маскированные форматы. См. Ниже раздел «Модель и вид». Здесь я полностью исчерпал идеи. Пожалуйста помоги!Отображение модели TimeSpan в представлении с маской формата mm: ss

Модель:

[DataType(DataType.Time)] 
[DisplayFormat(DataFormatString = "{0:mm\\:ss}", ApplyFormatInEditMode = true)] 
public TimeSpan? LengthAct { get; set; } 

Вид:

@Html.EditorFor(m => m.LengthAct, new { htmlattributes = new { @class = "form-control", data_val = "true", data_val_required = "Length is required" } }) 
+0

Попытайтесь сделать это: 'public TimeSpan? LengthAct { get {return Time.ToString(). Подстрока (3); } set {} } ' – maxshuty

+0

@ Вы пытались использовать' @ Html.TextBoxFor() 'помощник? –

+0

@ Html.TextBoxFor(), кажется, убивает аннотации данных все вместе. – Sam

ответ

0

Может быть, это может помочь вам:

@Html.TextBoxFor(x => x.LengthAct, "{0:mm\\:ss}") 

Привет !!

+0

Спасибо, но это не сработает. – Sam

0

Если вы применяете DataType.Time к объекту собственности, а затем визуализируйте его с помощью EditorFor, вы получите вход HTML5. В поддерживаемых браузерах это часто будет представлено пользователю в виде отформатированного элемента управления, позволяющего вводить часы и минуты в отдельности. По крайней мере, если браузер использует локальную сеть в США, время будет 12-часовым, а также будет AM/PM-селектор. Я не уверен, какие браузеры, как Chrome, отображаются в других местах, поскольку я лично не пробовал это. Я предполагаю, что если локаль использует 24-часовое время, у вас не будет селектора AM/PM, но я просто догадываюсь.

Независимо от того, что все, что вы говорите, вы не хотите, на самом деле является частью встроенного контроля браузера. Если вам это не нравится, единственным реальным вариантом является использование ввода типа text. Вам нужно либо удалить аннотацию DataType (хотя это повлияет на проверку поля), либо использовать Html.TextBoxFor вместо Html.EditorFor.

+0

Если я удалю 'DataType. Time' будет ли аннотация ниже применять маску к текстовому окну для? '[DisplayFormat (DataFormatString =" {0: mm \\: ss} ", ApplyFormatInEditMode = true)]' – Sam

+0

Нет, 'DisplayFormat' не влияет на используемый тип ввода. Однако теперь, когда я думаю об этом, удаление аннотации «DataType» может не сработать. 'EditorFor' также рассматривает тип свойства, и поскольку вы имеете дело с' TimeSpan', он все еще может использовать тип 'time'. Самая безопасная ставка - просто использовать 'TextBoxFor', так как это всегда будет использовать тип' text', если вы не передадите другой тип в параметре 'htmlAttributes'. –

+0

Итак, я теряю маскировку, на которую я надеялся ... Все смущаюсь. – Sam

Смежные вопросы