web-dev-qa-db-ja.com

指定された値は、必要な形式yyyy-MM-ddに準拠していません

データ注釈、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を伝える方法はありますか?

38
Andy Clark

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}")を保持できます

53
user3559349
3
M. Ruiz

問題はtype = "date"にある可能性があります。とにかくそれが私の状況でした。 type = "text"に変更されると機能しました。インターフェイスがMVCラッパーで構築されている場合は、それに応じてhtml属性を置換または設定する必要があります。

3
Petre Ionescu

type属性をテキストに設定します。

@Html.TextBoxFor(m => m.MyDate, new { @type = "text"  })
0
devlin carnate

ここの答えで何かを強調したいと思います。

グローバリゼーションとローカリゼーションを備えたアプリケーションを構築している場合、Htmlヘルパーを使用してフォーマットを渡す方法の方が優れています。 EditorForを使用して、datepickerに必要なIDまたはクラスを渡すこともできます。

0
user3357031