簡単な答えは、カスタムの日付形式を使用しないことです。常に.Format( "MM / dd / yyyy")を明示的に実行し、 "dd / MM / yyyy"を使用しないでください("yyyy-MM-dd"または"MMM d、yyyy"は問題ない場合があります)。また、コントロールパネルまたはWeb.configで米国の地域設定を使用するようにWebサーバーを設定します。
ここで、問題の説明と、実際にdd / MM/yyyyを機能させる方法について説明します。
剣道の日付検証では、デフォルトの剣道文化の日付形式kendo.culture()。calendar.patterns.d(および時間の場合は.t)が使用されます。これを直接設定するか、別のカルチャを適用すると、検証される日付形式が設定されます。kendo.parseDateを使用するため、「MMM d、yyyy」のようなものは問題ありませんが、d> 12でデフォルトの米国文化が使用されている場合、「dd / MM / yyyy」のようなものは検証に失敗します(方法については、kendoグローバリゼーションデモを参照してください)。文化の切り替え)。
これが発生する理由は、DatePicker.Format(...)がわずかに壊れているためです。これはkendo.aspnetmvc.jsのバグであり、DatePicker形式を無視し、現在のカルチャ日付形式を使用してparseDateを実行する代替の日付検証関数を提供します。これは修正されたJavaScriptです:
date: function(input) {
var dp = input.data("kendoDatePicker") || input.data("kendoDateTimePicker");
if (dp != undefined) {
return input.val() === "" || kendo.parseDate(input.val(), dp.options.format) !== null;
}
return input.val() === "" || kendo.parseDate(input.val()) !== null;
},
また、kendo.validator.js / kendo.web.jsの日付バリデーター関数にマイナーなバグがあり、InternetExplorerのグリッドでの日付検証が常に失敗します。
また、剣道文化に一致するようにWebサーバーのグローバリゼーションがUSに設定されていることを確認してください(Web.configまたはWindowsリージョナルコントロールパネル)。FirefoxはMM/dd / yyyyを投稿し、Webサーバーはそれに一致する必要があります。また、DatePicker.Formatを明示的に指定しない場合、Webサーバーの地域の日付形式がすべてのクライアントブラウザーに適用されます。したがって、WebサーバーのWindowsのコントロールパネルでカナダ/英国の日付形式が設定されている場合、kendoグリッドのDatePickersはデフォルトでdd / MM / yyyyに設定され、検証でエラーが発生し、FirefoxがWebサーバーに投稿するときにエラーが発生します(Firefoxの投稿でのkendoのデフォルトの文化) MM / dd / yyyyなので、Webサーバーがdd / MM / yyyyを予期している場合、mvc日付バインディングは失敗します)。
注:MVC以外の日付バリデーターを使用する場合は、次のようにします。data-val-date属性を削除します。追加:data-type = \ "date \" data-format = \ "dd / MM / yyyy h:mm:sstt\"。これは、htmlヘルパーを使用しては不可能だと思います。htmlとjavascriptを直接指定する必要があります。
注:「data-val-date」属性がないため、非グリッドDatePickersには検証がないようです。
また、「KendoUIは最初にparseFormatsオプションを使用して日付を解析し、次にそれをformatオプションに変換して、最後に検証を実行することを忘れないでください。そのため、検証では["MM / dd / yyyy"、"ではなくyyyy-MM-ddを使用します。" dd / MM /yyyy"]。" -剣道バリデーターを使用して日付をyyyy-MM-ddの形式で検証する方法は?
Web.configのグローバリゼーションライン:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US" />