5

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

我不确定这是否是最佳选择,但我正在使用 TimeSpan 作为该字段。为了验证输入,我想使用 Range 属性和 DisplayFormat 属性。

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

型号类:

public class Schedule
{
    public Schedule()
    {
        this.ScheduleTime = new TimeSpan(0, 0, 0);
    }

    /// <summary>
    /// The time of day for the schedule to run
    /// </summary>
    [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; }
}

错误信息:

错误信息

4

3 回答 3

10

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

[Range(typeof(TimeSpan), "00:00", "23:59")]
于 2018-02-22T23:13:27.493 回答
7

我知道这是一篇旧帖子,但我能够使用正则表达式而不是像这样的范围验证来保持客户端验证:

    [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; }
于 2015-01-29T15:04:30.323 回答
2

您知道那些您提出问题,然后答案就出现在您面前的时候吗?这对我来说就是其中之一。

我发现了这篇 SO 帖子: 为什么 ASP.Net MVC 范围属性采用类型?

它将问题描述为 jQuery 无法处理 Range 表达式,因此客户端验证将不起作用,但服务器端验证将。

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

<script>
    $(document).ready(function () {
        $("#ScheduleTime").rules('remove', 'range');
    });
</script>

现在验证ModelState.IsValid在控制器中检查时可以正常工作。

于 2013-09-04T23:14:41.453 回答