2015-11-25 41 views
1

我試圖使用TextBoxFor來顯示一個輸入元素來編輯DateTime屬性的時間(小時和分鐘)。使用TextBoxFor編輯時間

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

public DateTime Hour { get; set; } 

筆者認爲:

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

,但它總是顯示完整的日期和時間值,如:

11/25/2015 13:40:00 

我只需要:

13:40 

回答

0

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

在你看來:

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

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

您還可以使用EditorFor代替TextBoxFor並在模型或視圖模型使用數據的註釋,像這樣:

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

,然後在視圖中使用:

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

可以offcourse使用任何你想要的字符串格式。在下面你的鏈接會發現一個完整的參考:

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

+0

它不顯示時間。它只顯示「 - : - 」。我需要包含屬性:[DataType(DataType.Time)]。 – Beetlejuice

+0

事實上它只顯示「 - : - 」。我很抱歉,但之前我無法測試它。我編輯了答案,以便您可以預先填充其值(無論是從控制器還是視圖,它都是您)。但是,如果您不預先填充它,它會一直顯示「 - : - 」。 –

+0

即使這樣做是正確的,它會生成如下輸入:。這就是顯示「 - : - 」的原因,值應該只是「09:30」。 – Beetlejuice

0

我解決了用我的類映射日期時間爲一個字符串,已經格式化的輔助屬性這個問題。

在模型:

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