MVC EditorFor Timespan正在删除秒

时间:2017-08-09 16:43:51

标签: c# asp.net-mvc datetime timespan editorfor

为我的Timespan生成的编辑器只包括小时和分钟。我希望它是标准的,即hh:mm:ss。

我原本以为默认就是那个,我试过了。我也试过了

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

视图

<div class="form-group">
    @Html.EditorFor(model => model.SearchCriteria.StartTime, new {htmlAttributes = new {@class = "form-control"}})
    @Html.ValidationMessageFor(model => model.SearchCriteria.StartTime, "", new {@class = "text-danger"})
</div>

1 个答案:

答案 0 :(得分:1)

您可以使用inputmask获取屏蔽/格式化效果:

  1. 将类添加到您要格式化的控件中,例如时间掩模
  2. @Html.EditorFor(model => model.SearchCriteria.StartTime, new {htmlAttributes = new {@class = "form-control time-mask"}})

    1. 添加对jquery.inputmask.bundle包的引用

    2. 使用输入掩码功能。

    3. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.3.4/jquery.inputmask.bundle.min.js"></script>

      <script type="text/javascript">
          $(document).ready(function () {
              $('.time-mask').inputmask("hh:mm:ss", {
                  placeholder: "hh:mm:ss",
                  showMaskOnHover: false
              });
          });
      </script>
      

      请记住TimeSpan并非旨在表示一天中的时间,而是用于显示一段时间,因此TimeSpan值为负值或超过24小时是正常的。

      <强>更新

      行为是正常的,因为[DataType(DataType.Time)]注释将添加type =&#34; time&#34; HTML中的输入元素,这是某些浏览器(如Chrome)但不使用FireFox时使用的HTML5属性。如果要使用注释,则需要添加属性step =&#34; 1&#34;编辑所以你的代码将是:

      @Html.EditorFor(model => model.StartTime, new { htmlAttributes = new { @class = "form-control", @step = "1" } }).
      

      请注意,这适用于Chrome,但不适用于FireFox,IE 11及更早版本。这就是我提出其他解决方案的原因。