2013-06-18 171 views
3

我有以下模型屬性MVC視圖中顯示時的日期只需要時間

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:d/M/yyyy}", ApplyFormatInEditMode = true)] 
[Display(Name = "Date of Screening")] 
public DateTime? ScreeningDate { get; set; } 

及以下觀點:

@Html.TextBoxFor(model => model.ScreeningDate, new { @class="date maintainState" }) 

,但我得到這個標記的文本框:

<input value="18/06/2013 12:00:00 AM" class="date maintainState" ... type="text" /> 

我想要的值是18/06/2013

它適用於@ Html.EditorFor,但我需要控制類屬性。我究竟做錯了什麼?非常感謝你。

+0

。 http://stackoverflow.com/questions/7124434/display-only-date-and-no-time – Jinesh

回答

3

它適用於@ Html.EditorFor,但我需要控制 類屬性。我究竟做錯了什麼?

沒什麼,這是如何工作。只有EditorFor和DisplayFor幫助者會尊重[DisplayFormat]屬性。

我知道您使用的是TextBoxFor,因爲您想將自定義類應用於EditorFor不允許的字段。但事實並非如此。 EditorFor幫手所做的就是呈現相應的編輯器模板。如果您沒有自定義模板,則會呈現默認模板。

那麼是什麼?

那麼,你爲DateTime類型編寫了一個自定義編輯器模板,它將按照你的意願行事。就像在~/Views/Shared/EditorTemplates/DateTime.cshtml

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData) 

,然後簡單地:

@Html.EditorFor(model => model.ScreeningDate, new { @class="date maintainState" }) 

現在殺了2只用一顆子彈:

  • 我們應用所需的格式
  • 我們應用所需類輸入字段

如果你想殺死第三隻兔子,並且能夠在表單提交時驗證這個自定義格式(因爲記住默認的模型綁定器不關心這個[DisplayFormat]屬性),你可以編寫一個自定義模型綁定器將尊重[DisplayFormat]屬性,就像我在這裏解釋的那樣:https://stackoverflow.com/a/7836093/29407

相關問題