Sam*_*emi 17 format asp.net-mvc timespan
我有一个包含几个时间选择器的MVC页面.它们存储在模型中的对象列表中,可以为空TimeSpan
.问题是我将带有秒的打印时间输入到输入字段中.有没有办法格式化这些模型属性,以便我以其他方式打印时间跨度(比如7:00
,而不是07:00:00
)?毋庸置疑,我的"建议" [DisplayFormat...]
没有奏效.至少不是我希望的方式.
输入字段的定义如下:
@Html.TextBoxFor(x => x.Shifts[i].Start)
Run Code Online (Sandbox Code Playgroud)
该模型的相关部分如下:
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; }
...
}
Run Code Online (Sandbox Code Playgroud)
一如既往地欣赏它!
Mat*_*int 31
[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; }
Run Code Online (Sandbox Code Playgroud)
但请记住,主要目的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}")
Run Code Online (Sandbox Code Playgroud)
或者您可以切换到EditorFor
这样:
@Html.EditorFor(x => x.Shifts[i].Start)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21395 次 |
最近记录: |