2015-10-20 454 views
1

我想填充@Html.EditorFor幫手。我已經創建了下面的屬性僅在@ Html.EditorFor幫手中顯示日期

[DataType(DataType.Date, ErrorMessage="Date only")] 
[DisplayFormat(DataFormatString = "{0:dd/MM/yy}", ApplyFormatInEditMode = true)] 
public DateTime? YearBought { get; set; } 

視圖模型和我的助手是如下設置(一)

@Html.ValidationMessageFor(m => m.YearBought) 
@Html.EditorFor(model => model.YearBought, new { @type = "date" }) 

我也曾嘗試(二)

@Html.ValidationMessageFor(m => m.YearBought) 
@Html.EditorFor(model => model.YearBought.Value.Date) 

使用上述格式(a)不顯示任何內容。使用上述格式(b)12/05/2014 00:00:00以文本框格式顯示。

我想實現無時間日期選擇器的格式顯示

我已審查其他一些問題,但不能看到我做了什麼不同。

當我看着我的數據庫,該值另存爲2014-05-12,當我保存價值EditorFor助手生成所需的輸入設備審查

firstsecondthird

問題的....不勝枚舉

編輯 剛剛在Chrome瀏覽器開發工具的控制檯,所以這個消息

指定的值「14年12月5日」不符合要求的格式,「YYYY-MM-DD」

我想DisplayFormat(DataFormatString = "{0:dd/MM/yy}"被定義如何顯示我的約會?

+0

什麼額外的'@ type'呢?在'@ Html.EditorFor(model => model.YearBought,new {@type =「date」})'你不能指定htmlattributes如果你使用EditorFor只是好奇 – JamieD77

+0

@type日期是最後一次嘗試使它工作,沒有其他的邏輯比這恐懼:( – tony09uk

回答

5

你需要使用ISO格式,採用type="date"

[DataType(DataType.Date, ErrorMessage="Date only")] 
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
public DateTime? YearBought { get; set; } 

這時候會顯示在瀏覽器文化的日期。

請注意,沒有必要添加@type = "date"。由於DataType屬性,EditorFor()方法將添加。還要注意的是type="date"是在Chrome只支持(Firefox和IE瀏覽器將只產生一個正常的文本框)

如果你想顯示在一個標準的文本框格式dd/MM/yyyy那麼你可以使用

@Html.TextBoxFor(m => m.YearBought, "{0:dd/MM/yyyy}") 
+0

當我在編輯器中使用相同的語法,那麼它不工作@ Html.EditorFor(m => m.YearBought,「{0:dd/MM/yyyy}」) –

+0

@AshishShukla,因爲'EditorFor()'不支持這種語法,所有你需要的是'@ Html.TextBoxFor(m => m.YearBought)' - EditorFor()方法尊重'DataType'和'DisplayFormat '屬性 –

0

我會使您的視圖模型的YearBought財產a String爲最簡單的操作。服務器可以格式化日期,它可以在回發時進行解析,並且仍然可以使用DataType.Date數據註釋進行jQuery驗證。這也確保顯示值在提交到視圖之前就是你想要的。

0

對於HTML類型屬性的替代,您可以在MVC中使用EditorTemplate將需要的標記,CSS和JS呈現爲已知C#數據類型(如DateTime)的自定義編輯器。

這裏是a walkthrough用於創建MVC自定義「EditorTemplate」(雖然不是一個日期數據類型,但概念是相同的)