2016-08-29 68 views
3

我在寫一個簡單的ASP.Net頁面,其中有幾個字段,其中一個是超時。我想將其顯示爲毫秒(但仍希望有一個時間範圍而不是int /字符串)。我在寫下面的代碼:格式化時間段爲TotalMilliseconds

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

但是,這是一個問題。這種格式不能按預期工作。我預計TimeSpan.FromMinutes(2).ToString("fff")返回120000,但它返回000。這顯然是因爲TimeSpan使用Milliseconds屬性,在此示例中爲零,但我需要TotalMilliseconds

是否有某種格式強制以所需單位顯示整個TimeSpan?我真的不想寫一個整數字段並將其映射到TimeSpan上。

+0

的'的ToString( 「FFF」)中使用'將返回格式化爲整個'TimeSpan'「 fff「,即幀/毫秒至3個字符。同樣,如果你打印「ss」,你會得到2個字符的秒數。你說你需要'TotalMilliseconds' - 這是正確的,並會給你'120000'作爲'double'。我不確定你在哪裏掙扎?你想要的輸出是什麼? –

+0

@GeoffJames當你指定要綁定的值時,你不能調用屬性或方法。當我寫'asp-for =「Entry.Interval」'它會從中獲取一個值,然後應用'format'並呈現。然後,按照相反的順序提交它,解析該值並返回最終結果。我不能使用'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