2012-06-27 68 views
1

因此,我有一段視頻持續時間,我希望在Razor中顯示該持續時間。如何在MVC Razor中顯示TimeSpan

目前我使用

@TimeSpan.FromSeconds(item.Duration).ToString() 

然而,代碼的其餘部分,我使用用途

@Html.DisplayFor(modelItem => item.Description) 

有沒有辦法讓時間(目前爲一個int),以顯示作爲時間跨度?使用@Html.DisplayFor語法。 item.duration正在形成一個實體框架模型,該模型在數據庫中保存爲int。

回答

3

您可以使用partial class定義擴展您的模型類。

public partial class My_class_that_has_been_created_by_EF { 
    public string Timespan { 
     get { 
      return Timespan.FromSeconds(Duration).ToString(); 
     } 
    } 
} 

然後在您的視圖與

@Html.DisplayFor(modelItem => item.Timespan) 
11

約翰使用它,

創建自己的顯示模板。爲此,請按照下列步驟操作:

  1. 創建一個名爲下查看DisplayTemplates /文件夾共享
  2. 根據這個新的文件夾,創建一個名爲TimeSpan.cshtml
  3. 現在的局部視圖,在你看來,任何時候你遇到一個時間跨度的模型屬性,它將自動由TimeSpan DisplayTemplate呈現。
  4. 爲您的模型添加一個新的get屬性。

型號編輯(添加以下):

public TimeSpan MyTimeSpanProperty 
{ 
    get 
    { 
     return TimeSpan.FromSeconds(Duration); 
    } 
} 

TimeSpan.cshtml

@model TimeSpan 
@string.Format("{0}:{1}:{2}", Model.Hours, Model.Minutes, Model.Seconds) 

調用您的視圖

@Html.DisplayFor(m => m.MyTimeSpanProperty) 

這將顯示爲3:24:16等。 。

這就是它的全部(假設你會傳遞一個TimeSpan類型的屬性,所以如果可能的話,看看你是否可以對你的模型進行小改動! )

+1

我想補充這一點。請將'TimeSpan.cshtml'中的格式行設置爲'「{0}:{1:00}:{2:00}」',以確保您獲得了分鐘和秒的兩位數填充。 '1:4:7'變成'1:04:07' – TankorSmash

+1

很好的一點,謝謝你補充說 - 謝謝。 –

+0

格式00:00:00似乎是默認格式「DisplayFor」。爲了確保實際上影響顯示,您可能需要使用一些不同的字符來確保您不僅看到默認行爲。 –

2

你應該充分利用DataAnnotations命名空間和DisplayTemplates在ASP.NET MVC

  1. 先用UIHint屬性掩蓋你的財產和模板設置爲VideoDuration型號/ YourVideoModel.cs

    [UIHint("VideoDuration")] 
    public int Duration { get; set; } 
    
  2. 將顯示模板添加到您的項目中Views/Shared/DisplayTemplates/VideoDuration。CSHTML(您可能需要如果它不存在添加文件夾DisplayTemplates

    @model int? 
    @string.Format("{0:g}", TimeSpan.FromSeconds(Model)) 
    

然後你可以使用它在您的觀點是這樣的:

@Html.DisplayFor(m => m.Duration) 
相關問題