使用TextBoxFor编辑时间

本文关键字:时间 编辑 TextBoxFor 使用 | 更新日期: 2023-09-27 18:24:15

我正在尝试使用TextBoxFor显示一个输入元素来编辑DateTime属性的时间(小时和分钟)。

在我的模型中,属性配置如下:

public DateTime Hour { get; set; }

在我看来:

@Html.TextBoxFor(model => model.Hora, "HH:mm", new { @class = "form-control" })

但它总是显示完整的日期和时间值,如:

11/25/2015 13:40:00

我只需要:

13:40

使用TextBoxFor编辑时间

您也可以使用EditorFor而不是TextBoxFor,并在模型或viewModel中使用数据注释,如下所示:

[DataType(DataType.Time)]
[DisplayFormat(DataFormatString = "{0:HH:mm}", ApplyFormatInEditMode = true)]
public DateTime Hour { get; set; }

然后在你看来,你使用:

@Html.EditorFor(model => model.Hour, new { @class = "form-control" })

您当然可以使用您想要的字符串格式。在下面的链接中,你会发现一个完整的参考:

https://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

我一直在使用jQuery.DateTimePicker,并取得了相对的成功。

在您看来:

@Html.TextBoxFor(model => model.Hora, new { @class = "form-control" })
<script>
    jQuery('#Hora').datetimepicker({
        datepicker:false,
        format:'H:i'
    });
</script>

我在类中使用了一个辅助属性来解决这个问题,该属性将DateTime映射到一个已经格式化的字符串。

型号:

    private DateTime hour;
    [Required]
    public DateTime Hour  //this is my mapped property
    {
        get
        {
            return hour;
        }
        set
        {
            hour = value;
            //update unmapped property 
            hourString = value.ToString("HH:mm");
        }
    }
    private string hourString;
    [NotMapped]
    public string HourString {
        get
        {
            return hourString;
        }
        set
        {
            hour = new DateTime(hour.Year, hour.Month, hour.Day, Convert.ToInt16(value.Substring(0, 2)), Convert.ToInt16(value.Substring(3, 2)), 0);
        }
    }