如何在MVC Razor中显示TimeSpan

Joh*_*ell 2 c# asp.net-mvc razor asp.net-mvc-3

所以我有一段视频的持续时间,我希望在Razor中显示该持续时间.

目前我正在使用

@TimeSpan.FromSeconds(item.Duration).ToString()
Run Code Online (Sandbox Code Playgroud)

但是我正在使用的其余代码使用

@Html.DisplayFor(modelItem => item.Description)
Run Code Online (Sandbox Code Playgroud)

有没有办法让持续时间(目前是一个int)显示一个时间跨度?使用@Html.DisplayFor语法.item.duration是一个Entity Framework模型,它在数据库中作为int保存.

jim*_*lan 12

约翰,

创建自己的显示模板.为此,请按照下列步骤操作:

  1. 在Views/Shared下创建一个名为DisplayTemplates的文件夹
  2. 在该新文件夹下,创建一个名为TimeSpan.cshtml的局部视图
  3. 现在,在您的视图中,只要遇到时间跨度的模型属性,它就会自动由TimeSpan DisplayTemplate呈现.
  4. 向模型添加新的get属性.

模型编辑(添加以下内容):

public TimeSpan MyTimeSpanProperty
{
    get
    {
        return TimeSpan.FromSeconds(Duration);
    }
}
Run Code Online (Sandbox Code Playgroud)

TimeSpan.cshtml

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

在您的视图中调用

@Html.DisplayFor(m => m.MyTimeSpanProperty)
Run Code Online (Sandbox Code Playgroud)

这将显示为3:24:16等.

这就是它的全部内容(因为它假定你将传入TimeSpan类型的属性,所以如果可能的话,看看你是否可以对你的模型进行那么小的改动!!)

  • 只是为了补充这一点.将`TimeSpan.cshtml`中的格式行设置为"{0}:{1:00}:{2:00}"`以确保您在分钟和秒钟内获得了两位数的填充.`1:4:7`变为`1:04:07` (2认同)