asp.net-mvc - 格式化 MVC 模型 TimeSpan 字段

标签 asp.net-mvc format timespan

我有一个包含一些时间选择器的 MVC 页面。这些作为可空对象存储在模型中的对象列表中 TimeSpan .问题是我在输入字段中打印了以秒为单位的时间跨度。有没有办法格式化这些模型属性,以便我以其他方式打印时间跨度(如 7:00 ,而不是 07:00:00 )?不用说,我的“建议”[DisplayFormat...]没用。至少不是我希望的那样。

输入字段定义如下:

@Html.TextBoxFor(x => x.Shifts[i].Start)

模型的相关部分如下所示:
public class Workshift
{
    [DisplayFormat(Something here perhaps?)]
    public TimeSpan? Start { get; set; }
    public TimeSpan? End { get; set; }
    public TimeSpan? Pause { get; set; }
}

public class TimeRegistrationViewModel
{
    public List<Workshift> Shifts { get; set; }

    ...
}

一如既往地欣赏它!

最佳答案

[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)]
public TimeSpan? Start { get; set; }

[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)]
public TimeSpan? End { get; set; }

[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)]
public TimeSpan? Pause { get; set; }

但请记住 TimeSpan 的主要目的是表示测量的持续时间,而不是一天中的时间。这意味着 TimeSpan值可以超过 24 小时。它们也可以是负数,表示在时间线上向后移动。

将它们用作时间是可以接受的,实际上是由框架本身完成的(例如,DateTime.TimeOfDay)。但是当以这种方式使用时,您应该仔细验证用户输入。如果您仅依赖数据类型,则用户可能能够输入有效时间跨度的值,但不是有效的白天时间。例如,-1.22:33:44是有效的 TimeSpan表示过去 1 天 22 小时 33 分 44 秒。

如果 .Net 有一个原生的 Time 会容易得多。类型,但它没有。更新:现在有一个原生 TimeOfDay输入 System.Time CoreFXLab 中提供的包.

此外,TextBoxFor方法不会拾取数据注释。您可以直接将格式字符串指定为参数,如下所示:
@Html.TextBoxFor(x => x.Shifts[i].Start, "{0:hh\\:mm}")

或者你可以切换到EditorFor像这样:
@Html.EditorFor(x => x.Shifts[i].Start)

关于asp.net-mvc - 格式化 MVC 模型 TimeSpan 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571291/

相关文章:

c# - 如何通过 Javascript 调用重定向到另一个操作的 Controller 操作?

asp.net-mvc - asp.net mvc web api 同一个 Controller 不同的函数参数

asp.net-mvc - 如何像绘制 Ember.TextField 一样绘制 Password 字段?

c# - TimeSpan 的自定义字符串格式

php - SQL时间段查询

c# - C# 中的 TimeSpan "pretty time"格式

html - label 标签中的 FOR 是什么意思?

command-line - 如何从命令行更改日期格式?

带逗号但没有小数的 R 标签

Java程序输出