2016-08-29 8 views
3

Я пишу простую страницу ASP.Net, где у меня есть несколько полей, один из которых - для тайм-аута. Я хочу отображать его как миллисекунды (но все же хочу иметь временной интервал вместо int/string). Я пишу следующий код:Формат timespan as TotalMilliseconds

<input asp-for="Entry.Interval" asp-format="{0:fff}" type="text" class="form-control"> 

Но вот проблема. Этот формат работает не так, как ожидалось. Я ожидаю, что TimeSpan.FromMinutes(2).ToString("fff") вернет 120000, но он вернет 000. Это obviosly becuase TimeSpan использует Milliseconds свойство, которое в этом примере равно нулю, но мне нужно TotalMilliseconds.

Есть ли какой-то формат, который заставляет показывать целые TimeSpan в желаемых единицах? Я действительно не хочу писать целое поле и сопоставлять его вручную на этом TimeSpan.

+0

Параметр '.ToString ("FFF")' возвращает все 'TimeSpan' отформатированный как" fff ", являющийся фреймами/миллисекундами до 3 символов. Аналогично, если вы напечатали «ss», вы получите секунды до 2 символов. Вы говорите, что вам нужно «TotalMilliseconds» - это правильно и даст вам «120000» как «double». Я не уверен, где вы боретесь? Каков ваш желаемый результат? –

+0

@GeoffJames, когда вы указываете значение, подлежащее привязке, вы не можете вызывать свойства или методы. Когда я пишу 'asp-for =" Entry.Interval ", он принимает значение из него, затем применяет' format' и renders. Затем отправьте его, выполнив его в обратном порядке, разобрав значение и вернув окончательный результат. Я не могу использовать 'TotalMilliseconds', потому что в этом случае он корректно отображает значение, но не сможет проанализировать его при обратной передаче. –

+0

Я вижу, поэтому вы хотите отобразить 'Entry.Interval' (2 минуты) как' 120000' на странице? Какой тип 'Entry.Interval'? 'TimeSpan'? –

ответ

4

Вы можете определить еще одно свойство только для использования в связывании

class Entry 
{ 
    public TimeSpan Interval { get; set; } 
    public int IntervalMS 
    { 
     get { return (int)Interval.TotalMilliseconds; } 
     set { Interval = TimeSpan.FromMilliseconds(value); } 
    } 
    //other stuff... 
} 

А потом

<input asp-for="Entry.IntervalMs" type="text" class="form-control"> 
+1

Вам не хватает роли, 'TotalMilliseconds' возвращает' double' вместо 'int' –

+0

@AlexZhukovskiy спасибо, что указал, что исправлено – slawekwin