0

我有我的模型的屬性如下:DisplayFormat停止在Chrome中顯示英國日期?

[DisplayName("Manufactured Date")] 
    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
    public DateTime? DateManufactured { get; set; } 

在我搭建的MVC核心觀點我有這樣的代碼,以顯示該值:

<input asp-for="LiftingItem.DateManufactured" class="form-control" /> 

在Chrome中,輸入顯示文本「 DD/MM/YYYY」,我得到的錯誤:

The specified value "09/02/2006" does not conform to the required format, "yyyy-MM-dd".

而在IE中,我得到的實際日期(例如 「2006年9月2日」)。我認爲這種差異是因爲Chrome使用HTML 5日期類型輸入,因此需要「yyyy-MM-dd」格式的格式才能顯示它?

如果我刪除DisplayFormat屬性,果然它可以在Chrome中運行,但在IE中日期格式不正確(「yyyy-MM-dd」而不是「dd/mm/yyyy」)。

因此,看起來像使用非「yyyy-MM-dd」格式的DisplayFormat可以阻止Tag Helpers的工作?有什麼辦法可以很好地兼容HTML 5兼容和舊版瀏覽器?

PS:我也嘗試在視圖中應用格式,而不是使用asp-format="{0:dd/MM/yyyy}as described in this question,但這也阻止了它在Chrome中的工作。

編輯:我也可以刪除[DataType(DataType.Date)],但是我沒有在兼容HTML5的瀏覽器中使用datepicker,我一定會在移動設備上使用它。

回答

1

是的,您可以將標籤助手與DisplayFormat數據註釋組合在一起。

So, it seems like using DisplayFormat with a non "yyyy-MM-dd" format stops the Tag Helpers working? Is there any way to get it working nicely for both HTML 5 compatible and older browsers?

剛剛從你的模型中刪除[DataType(DataType.Date)]並如期DisplayFormat(..)語句將開始工作。

PS: I've also tried applying the formatting in the view instead using asp-format="{0:dd/MM/yyyy} as described in this question , but that also stops it working in Chrome.

您可以用比你的模型中指定的一個與asp-format標籤幫手結合DisplayFormat(..)數據註解,如果你應要求,在一個特定的觀點,不同的日期格式。

如果你在你的模型中的以下屬性:與下面的代碼行

[DisplayName("Manufactured Date")] 
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
public DateTime? DateManufactured { get; set; } 

和視圖(例如詳細視圖):

@Html.DisplayFor(model => model.DateManufactured) 

那麼你的應用程序將顯示日期的格式與數據註釋中指定的格式相對應,即{0:dd/MM/yyyy}。這裏有一個例子:23/02/2017

如果在其他視圖中添加(例如一個編輯視圖)下面的代碼行(請注意,我添加了一個「M」的月份格式):

<input asp-for="LiftingItem.DateManufactured" asp-format="{0:dd/MMM/yyyy}" class="form-control" /> 

然後asp-format將優先於模型的數據表示法,並且您的應用程序用戶可以在輸入框中鍵入如下所示的日期:23/Feb/2017

+0

嘿,謝謝你。刪除'[DataType(DataType.Date)]'位的問題是你沒有得到瀏覽器內置的datepicker,這在移動設備上很痛苦。理想情況下,我還希望在桌面上使用內置datepicker的瀏覽器(其中有一個)。 – tomRedox

+0

@tomRedox是的你是對的。通過刪除'[DataType(DataType.Date)]',類型將不會被設置爲等於輸入元素的日期,即在HTML代碼''中不會得到這個。令人遺憾的是,事實上,對於Firefox,IE,Safari和舊版瀏覽器,您不會在上面使用數據註釋獲取日期選擇器。 – Aquablue

+0

謝謝,很高興知道我不會生氣!也許嘗試使用數據註釋是錯誤的方法,也許我應該查看某種條件邏輯來檢查HTML5瀏覽器,並根據是否使用HTML5瀏覽器來設置「輸入類型」。 – tomRedox