C# 如何在MVC Razor中显示时间跨度

C# 如何在MVC Razor中显示时间跨度,c#,asp.net-mvc,asp.net-mvc-3,razor,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正在从实体框架模型中提取,该模型在数据库中作为int保存

所以我有一个视频的持续时间,以秒为单位,我想在Razor中显示这个持续时间

目前我正在使用

@TimeSpan.FromSeconds(item.Duration).ToString()
但是,我使用的其余代码使用

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

是否有方法获取持续时间(当前为int)以显示时间跨度?使用
@Html.DisplayFor
语法。item.duration正在从实体框架模型中提取,该模型在数据库中作为int保存

可以使用定义扩展模型类

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)
约翰

创建自己的显示模板。要执行此操作,请执行以下步骤:

  • 在“视图/共享”下创建名为DisplayTemplates的文件夹
  • 在新文件夹下,创建一个名为TimeSpan.cshtml的局部视图
  • 现在,在您的视图中,无论何时遇到作为timespan的模型属性,timespan DisplayTemplate都会自动渲染该属性
  • 向模型添加新的get属性
  • 模型编辑(添加以下内容):

    TimeSpan.cshtml

    @model TimeSpan
    @string.Format("{0}:{1}:{2}", Model.Hours, Model.Minutes, Model.Seconds)
    
    在您的视图中调用为

    @Html.DisplayFor(m => m.MyTimeSpanProperty)
    
    这将显示为
    3:24:16


    这就是它的全部内容(虽然它假定您将传入一个TimeSpan类型的属性,因此如果可能,请查看您是否可以对您的模型进行微小更改!!)

    您应该利用ASP.NET MVC中的
    数据注释
    命名空间和
    显示模板

  • 首先使用
    UIHint
    属性屏蔽属性,并在Models/YourVideoModel.cs中将模板设置为
    VideoDuration

  • 在Views/Shared/DisplayTemplates/VideoDuration.cshtml中将显示模板添加到项目中(如果不存在,可能需要添加文件夹
    DisplayTemplates

  • 然后您可以在视图中使用它,如下所示:

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

    再加一句。将
    TimeSpan.cshtml
    中的格式行设置为
    “{0}:{1:00}:{2:00}”
    ,以确保分钟和秒的填充为两位数<代码>1:4:7变为<代码>1:04:07格式00:00:00显示为默认格式“DisplayFor”。为了确保您确实影响了显示,您可能需要使用一些不同的字符,以确保您不仅仅看到默认行为。
    [UIHint("VideoDuration")]
    public int Duration { get; set; }
    
    @model int?
    @string.Format("{0:g}", TimeSpan.FromSeconds(Model))
    
    @Html.DisplayFor(m => m.Duration)