所以我有一段视频的持续时间,我希望在Razor中显示该持续时间。
目前我正在使用
@TimeSpan.FromSeconds(item.Duration).ToString()
然而,我使用的其余代码使用
@Html.DisplayFor(modelItem => item.Description)
有没有办法让持续时间(目前是一个int)显示为一个时间跨度?使用@Html.DisplayFor
语法。 item.duration是一个Entity Framework模型,它在数据库中作为int保存。
答案 0 :(得分:12)
约翰,
创建自己的显示模板。为此,请按照下列步骤操作:
模型编辑(添加以下内容):
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
首先使用UIHint
属性屏蔽您的媒体资源,然后将模板设置为 Models / YourVideoModel.cs
VideoDuration
[UIHint("VideoDuration")]
public int Duration { get; set; }
在 Views / Shared / DisplayTemplates / VideoDuration .cshtml 中为您的项目添加展示模板(如果是DisplayTemplates
,则可能需要添加文件夹@model int?
@string.Format("{0:g}", TimeSpan.FromSeconds(Model))
它不存在)
@Html.DisplayFor(m => m.Duration)
然后你可以在你的视图中使用它:
{{1}}