TimeSpan上的Range和DisplayFormat属性

我正在构建一个计划屏幕,需要显示一个时间字段供用户输入计划的时间。

我不确定这是否是最好的选择,但我正在使用TimeSpan进行该领域。 要validation输入,我想使用Range属性和DisplayFormat属性。

当我调试并输入一个看似有效的值时,Range属性表示超出范围错误。 谁能看到我做错了什么? TimeSpan是否适合此用途? 任何帮助是极大的赞赏。

型号类:

public class Schedule { public Schedule() { this.ScheduleTime = new TimeSpan(0, 0, 0); } ///  /// The time of day for the schedule to run ///  [Required, DataType(System.ComponentModel.DataAnnotations.DataType.Time), Display(Name = "Schedule Time", Description = "Number of Hours and Minutes after Midnight Central Timezone"), DisplayFormat(DataFormatString = @"{0:hh\:mm\:ss}", ApplyFormatInEditMode = true), Range(typeof(TimeSpan), "00:00", "23:59")] public TimeSpan ScheduleTime { get; set; } } 

错误信息:

错误信息

我知道这是一个旧post,但我能够使用正则表达式而不是范围validation来保持客户端validation,如下所示:

  [Display(Name = "Schedule Time ")] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh\\:mm}")] [RegularExpression(@"((([0-1][0-9])|(2[0-3]))(:[0-5][0-9])(:[0-5][0-9])?)", ErrorMessage = "Time must be between 00:00 to 23:59")] public System.TimeSpan? ScheduleTime { get; set; } 

我在寻找类似问题时发现了这个问题,我想说的是,范围validation在ASPNET Core 2和JQuery v2.2.0中运行良好。

 [Range(typeof(TimeSpan), "00:00", "23:59")] 

你知道那些你提出问题的时间,答案刚出现之前不久吗? 这对我来说就是其中之一。

我发现这个SOpost: 为什么ASP.Net MVC范围属性采用类型?

其中描述了jQuery无法处理Range表达式的问题,因此客户端validation将不起作用,但服务器端validation将起作用。

所以我用javascript删除了这个字段的客户端validation:

  

现在,在检查控制器中的ModelState.IsValid时,validation工作正常。