日時フィールドのクライアント側の検証で問題が発生する状況があります。送信しようとすると、日付が無効であると表示され続けます(2013年7月27日)。しかし、日付を米国形式に変換すると機能します(2013年7月27日)。
私のビューモデルは次のとおりです。
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? AuditDate { get; set; }
Index.html
@Html.TextBoxFor(m => m.AuditDate)
Web.configを更新しました
<globalization culture="en-AU" uiCulture="en-AU" />
私は何を逃しましたか?
ありがとう
他の誰かが私のためにこれを分類しました、それはすべてクライアント側のJquery検証と関係がありました。もう一度ありがとうasymptoticFault ..あなたはロック.. MVC 4日付文化の問題?
これが私が使用したそのリンクからの情報です...
問題は、日付を解析するときに文化を考慮しないjQuery検証です。クライアント側の検証をオフにすると、カルチャを認識しているサーバーで日付が適切に解析されます。
修正は、日付のjQuery検証をオーバーライドし、追加のjQueryグローバリゼーションプラグインを含めることです。グローバル化プラグインを見つけることができます ここ 。 Nuget PackageManagerを使用してプラグインを簡単にダウンロードすることもできます。パッケージマネージャーを開いて、左側の[オンライン]タブを選択し、検索に「グローバル化」と入力したところ、これが最初の結果でした。インストールしたら、次の2つのファイルを含めました。
globalize.js
globalize.culture.en-AU.js
スクリプトタグを使用して直接含めるか、他のjQuery検証ファイルと一緒にバンドルに配置することができます。
それらを取得したら、次のスクリプトを追加して、日付のjQuery検証をオーバーライドする必要があります。
<script type="text/javascript">
$(function () {
$.validator.methods.date = function (value, element) {
Globalize.culture("en-AU");
// you can alternatively pass the culture to parseDate instead of
// setting the culture above, like so:
// parseDate(value, null, "en-AU")
return this.optional(element) || Globalize.parseDate(value) !== null;
}
});
</script>
クライアント検証の問題は、jquery.validate.unobtrusive.min.jsのMVCバグ(MVC 5でも)が原因で発生する可能性がありますが、発生しません)日付/日時形式を任意の方法で受け入れます。残念ながら、手動で解決する必要があります。
私の最終的に機能するソリューション:
前に含める必要があります:
@Scripts.Render("~/Scripts/jquery-3.1.1.js")
@Scripts.Render("~/Scripts/jquery.validate.min.js")
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
@Scripts.Render("~/Scripts/moment.js")
次を使用してmoment.jsをインストールできます。
Install-Package Moment.js
そして、最終的に日付形式パーサーの修正を追加できます。
$(function () {
$.validator.methods.date = function (value, element) {
return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
}
});
日付にjQuery検証を使用すると、Chromeを使用した日付ではうまく機能しないことがわかります。これは、米国以外のロケールを使用する場合に発生します。
解決策は ChromeのjQuery非米国日付検証の修正 で提示されました