使用TextBoxFor编辑时间

时间:2015-11-25 15:46:56

标签: c# asp.net-mvc

我正在尝试使用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

3 个答案:

答案 0 :(得分:2)

您也可以使用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

答案 1 :(得分:0)

我一直在使用jQuery.DateTimePicker相对成功。

在您看来:

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

<script>
    jQuery('#Hora').datetimepicker({
        datepicker:false,
        format:'H:i'
    });
</script>

答案 2 :(得分:0)

我使用我的类中的辅助属性解决了这个问题,该属性将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);
        }
    }