繁体   English   中英

如何在MVC Razor中显示TimeSpan

[英]How to display a TimeSpan in MVC Razor

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

目前我正在使用

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

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

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

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

约翰,

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

  1. 在Views / Shared下创建一个名为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类型的属性,所以如果可能的话,看看你是否可以对你的模型进行微小改动!!)

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

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

  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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM