问题
So I have a duration in seconds of a video and I would like to display that duration in Razor.
Currently I am using
@TimeSpan.FromSeconds(item.Duration).ToString()
However the rest of the code I am using uses
@Html.DisplayFor(modelItem => item.Description)
Is there way to get the duration (currently an int) to display a as a timespan? using the @Html.DisplayFor
syntax. The item.duration is pulling form a Entity Framework model which is held as a int in the database.
回答1:
You can extend your model class using a partial class definition.
public partial class My_class_that_has_been_created_by_EF {
public string Timespan {
get {
return Timespan.FromSeconds(Duration).ToString();
}
}
}
Then use it in your view with
@Html.DisplayFor(modelItem => item.Timespan)
回答2:
John,
Create your own display template. To do this, follow these steps:
- Create a folder called DisplayTemplates under Views/Shared
- Under that new folder, create a partial view called TimeSpan.cshtml
- Now, in your view, anytime you encounter a model property that is a timespan, it will automatically be rendered by the TimeSpan DisplayTemplate.
- Add a new get property to your model.
Model edit (add the following):
public TimeSpan MyTimeSpanProperty
{
get
{
return TimeSpan.FromSeconds(Duration);
}
}
TimeSpan.cshtml
@model TimeSpan
@string.Format("{0}:{1}:{2}", Model.Hours, Model.Minutes, Model.Seconds)
Invoked in your view as
@Html.DisplayFor(m => m.MyTimeSpanProperty)
This will display as 3:24:16
etc..
That's all there is to it (tho it assumes that you'll pass in a property of type TimeSpan, so if possible, see if you can make that minor change to your model !! )
回答3:
You should take advantage of DataAnnotations
namespace and DisplayTemplates
in ASP.NET MVC
First mask your property with
UIHint
Attribute and set the template toVideoDuration
in Models/YourVideoModel.cs[UIHint("VideoDuration")] public int Duration { get; set; }
Add a display template to your project at Views/Shared/DisplayTemplates/VideoDuration.cshtml (you may need to add folder
DisplayTemplates
if it not present)@model int? @string.Format("{0:g}", TimeSpan.FromSeconds(Model))
Then you can use it in your view like this:
@Html.DisplayFor(m => m.Duration)
来源:https://stackoverflow.com/questions/11229365/how-to-display-a-timespan-in-mvc-razor