データ注釈、Entity-Framework Jquery 2.1.3およびJquery UI 1.11.4を使用している.Net MVC 5アプリケーションがあります。
UK形式の「dd/MM/YYYY」を使用して、日付型の入力で編集フォームをレンダリングすると、 Google Chromeを使用すると、次のエラーメッセージが表示されます。
指定された値「10/10/2001」は、必要な形式「yyyy-MM-dd」に適合していません。 jquery-2.1.3.js:5317
モデル
public class MyModel
{
[Column(TypeName = "date"), DataType(DataType.Date), Display(Name = "My date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public string MyDate { get; set; }
}
マークアップ
<input class="text-box single-line" data-val="true" data-val-date="The field My date must be a date." id="MyDate" name="MyDate" type="date" value="10/10/2001" />
値は入力コントロールで正しく設定されていますが、日付はブラウザーに表示されません。 jQueryスクリプトファイルが表示されるため、これはjQueryの問題だと最初に思いましたが、IEおよびFirefoxでのテストではすべて正常に動作しています。
その後、デフォルトでchromeが私の英語はアメリカにいるとみなすため、Chromeの地域設定であると想定しました。地域設定を英国に変更しても、同じ問題が発生します。
簡単な修正は、私のモデルの形式をユニバーサルに変更することですが、英国のユーザーにとってはこれは少し異質です。
「dd/MM/YYYY」の日付形式を受け入れるchromeを伝える方法はありますか?
HTML5日付ピッカーの仕様では、日付はyyyy-MM-dd
(ISO形式)の形式である必要があると記載されています。これは、あなたがDisplayFormatAttribute
でなければならないことを意味します
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public string MyDate { get; set; }
または、次を使用して手動で形式を追加できます
@Html.TextBoxFor(m => m.MyDate, "{0:yyyy-MM-dd}", new { @type = "date" })
後者のオプションを使用すると、@Html.DisplayFor()
で使用するためにDataFormatString = "{0:dd/MM/yyyy}")
を保持できます
InputTagHelper.Formatを使用できます
<input asp-for="MyDate" asp-format="{0:yyyy-MM-dd}" />
問題はtype = "date"にある可能性があります。とにかくそれが私の状況でした。 type = "text"に変更されると機能しました。インターフェイスがMVCラッパーで構築されている場合は、それに応じてhtml属性を置換または設定する必要があります。
type
属性をテキストに設定します。
@Html.TextBoxFor(m => m.MyDate, new { @type = "text" })
ここの答えで何かを強調したいと思います。
グローバリゼーションとローカリゼーションを備えたアプリケーションを構築している場合、Htmlヘルパーを使用してフォーマットを渡す方法の方が優れています。 EditorForを使用して、datepickerに必要なIDまたはクラスを渡すこともできます。