仅显示TimeSpan显示模板中具有值的属性
本文关键字:显示 属性 TimeSpan | 更新日期: 2023-09-27 18:28:05
我需要在ASP.NET MVC 3中创建一个显示模板,该模板将显示时间跨度,只显示设置了值的属性。以下是一些例子来说明我的意思:
Timespan: 1 day, 2 hours, 3 minutes
Required display: "1 day, 2 hours, 3 minutes"
Timespan: 0 days, 2 hours, 1 minute
Required display: "2 hours, 1 minute"
Timespan: 0 days, 5 hours, 0 minutes
Required display: "5 hours"
正如你所看到的,我只需要显示非零值;但我不知道怎么。。。除了一个包含许多if语句的不雅解决方案之外。我想找到更好的方法。
这是我当前的代码:
@model TimeSpan
@if (Model.Days > 0)
{
@Model.Days if (Model.Days > 1)
{<text>days</text>}
else
{ <text>day</text>}
}
@if (Model.Hours > 0)
{
if (Model.Days > 0)
{
@:,
}
@Model.Hours if (Model.Hours > 1)
{<text>hours</text>}
else
{ <text>hour</text>}
}
@if (Model.Minutes > 0)
{
if (Model.Days > 0 || Model.Hours > 0)
{
@:,
}
@Model.Minutes if (Model.Minutes > 1)
{<text>minutes</text>}
else
{ <text>minute</text>}
}
您可能会重构一点(未经测试,不确定@functions
是否能在模板文件中工作,但……为什么不能?)
@model TimeSpan
@functions{
public string FormatElement(int value, string text){
if (value == 0) return string.Empty;
if (value > 1) text +="s";
return string.Format("{0} {1}", value, text);
}
}
@string.Join(", ", new[]{
FormatElement(Model.Days, "day"),
FormatElement(Model.Hours, "hour"),
FormatElement(Model.Minutes, "minute")
}
.Where(m => m != string.Empty));
正如@Serv评论的那样,我在"如何将TimeSpan转换为格式化字符串"中回答了这个问题?彼得。
请去那里看看他的解决方案。