【问题标题】:Range and DisplayFormat Attributes on TimeSpanTimeSpan 上的 Range 和 DisplayFormat 属性
【发布时间】:2013-09-04 22:21:43
【问题描述】:

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

我不确定这是否是最佳选择,但我正在为该字段使用 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; }
}

错误信息:

【问题讨论】:

  • 我不确定验证方面,但我会使用 DateTime 对象 - TimeSpan 表示持续时间,而 DateTime 表示实际时间。
  • 感谢@TheEvilPenguin,我考虑过使用 DateTime,但我认为我必须创建一个自定义属性来验证时间。另外,我使用的 API 有这个值作为 TimeSpan,所以幸运的是我找到了我在回答中提到的帖子,它似乎工作正常。

标签: c# asp.net-mvc data-annotations


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

        [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; }
    

    【讨论】:

      【解决方案3】:

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

      我发现了这个 SO 帖子: why does ASP.Net MVC Range Attribute take a Type?

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多