如何在MVC Razor中显示TimeSpan

时间:2012-06-27 15:08:55

标签: c# asp.net-mvc asp.net-mvc-3 razor

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

目前我正在使用

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

然而,我使用的其余代码使用

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

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

3 个答案:

答案 0 :(得分:12)

约翰,

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

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

    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 :(得分:4)

您可以使用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)

答案 2 :(得分:2)

您应该利用ASP.NET MVC中的DataAnnotations命名空间和DisplayTemplates

  1. 首先使用UIHint属性屏蔽您的媒体资源,然后将模板设置为 Models / YourVideoModel.cs

    中的VideoDuration
    [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)
    
  3. 然后你可以在你的视图中使用它:

    {{1}}