21

Kendo DatePickerを使用して、ASP.NETMVC4プロジェクトのKendoグリッドに表示されている日付フィールドを編集しています。[日付]フィールドで使用されているDatePickerでカスタムの日付形式の文字列を使用できるようにするために、フォルダーDate.cshtmlの下のファイルをEditorTemplates次のように更新しました。

@(Html.Kendo().DatePickerFor(m => m).Format("dd/MM/yyyy"))

そうすることで、DatePickerに希望どおりの形式を表示させることができました。ただし、手動キー入力またはポップアップカレンダーからの選択のいずれかを介して、入力用に入力された一部の日付の検証に失敗しました。

さらに調査すると、DatePickerはフォーマットに基づいて日付を検証していると言えM/d/Yます。その仮定は、2012年12月1日が有効な日付であるのに対し、2012年1月13日は有効ではないという私の創設に基づいて行われました。

.ParseFormat("dd/MM/yyyy")また、のDatePicker宣言の最後に追加しようとしましたDate.cshtmlが、何も修正されません。ですから、これは間違いなくバグであり、後でTelerikに報告します。

しかし、当分の間、これを機能させるための回避策を探しています。kendo.ui.validator.rules.mvcdateJavascriptでオーバーライドして、独自の検証関数を使用できることがわかりました。これはChromeでは正常に機能しますが、IE9では機能しません。

では、DatePickerにdd/MM/yyyy入力形式を受け入れるようにする方法はありますか?前もって感謝します。

4

6 に答える 6

12

内部的には、ASP.NET MVCの日付検証ルール(目立たないクライアント検証)は、kendo.parseDate(string)メソッドを使用します。このメソッドは、形式が定義されていない場合、事前定義された日付パターンを内部的に使用します。あなたの場合、デフォルトのカルチャは「en-US」であると思います。これが、「dd / MM/yyyy」形式の日付が無効と見なされるために検証が失敗する理由です。考えられる解決策の1つは、(行ったように)日付検証ルールをオーバーライドし、特定の形式を使用して文字列を解析することです。もう1つのオプションは、ページの差分カルチャ設定を設定することです。たとえば、「de-DE」カルチャの短い日付形式は「dd / MM/yyyy」です。

于 2012-07-25T08:33:26.297 に答える
11

私はこの方法を使用し、それはうまく機能しています。

これらの2行をページに追加します。

<script src="@Url.Content("~/Scripts/jquery.validate.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"></script>

次に、jQueryの日付検証メソッドをオーバーライドします。

<script>
    $(document).ready(function () {
        kendo.culture("en-MY"); //your culture
        $.validator.addMethod('date',
           function (value, element) {
               return this.optional(element) || kendo.parseDate(value)
           });
    });
</script>

一方、私のWeb.config中にはこれがあります...

<system.web>
    <globalization uiCulture="en-MY" culture="en-MY"></globalization>
</system.web>
于 2014-04-09T09:33:20.903 に答える
4
  [DataType(DataType.Date)]
  [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
  [Required(ErrorMessage = "Pick a date from Kendo Date Picker")]
   public DateTime mydate{ get; set; }

    @(Html.Kendo().DatePickerFor(m=>m.mydate)
                .Name("MyDate")
                .Format("dd/MM/yyyy")
                 .ParseFormats(new string[] {"dd/MM/yyyy"}))

/スクリプトdocument.ready関数を追加します/

     $(document).ready(function () { kendo.culture("en-GB");

         $.validator.methods['date'] = function (value, element) {
    var check = false;
    var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
    if (re.test(value)) {

        var adata = value.split('/');
        var dd = parseInt(adata[0], 10);

        var mm = parseInt(adata[1], 10);
        var yyyy = parseInt(adata[2], 10);
        var xdata = new Date(yyyy, (mm - 1), dd);

        if ((xdata.getFullYear() == yyyy) && (xdata.getMonth() == (mm - 1)) && 
            (xdata.getDate() == dd)) {

            check = true;
        }
        else {
            alert(value);
            check = false;
        }

    } else
        check = false;
    return this.optional(element) || check;
}

});

于 2013-12-19T13:25:12.423 に答える
1

日付検証ルールを変更しました:

$.validator.methods.date = function (value, element) {
    return this.optional(element) || /^\d\d?-\w\w\w-\d\d\d\d/.test(value);
};

私のフォーマットはあなたのフォーマットとは少し異なりますが、これを変更できるはずです。

于 2012-07-24T16:17:09.497 に答える
1

ここでガントコンポーネントを使用したときにも同じ問題が発生しました。Telerikのサポートは、私をここに紹介することで、私を正しい方向に導いてくれました。

私の重大な省略は、_Layout.vbhtmlファイルに次のものを含めなかったことです。

<script>
kendo.culture("en-GB");
</script>

(JSバンドルに適切なkendo.cultureスクリプトとともに)含まれると、ヘルパーは期待どおりに動作し始めました。

于 2015-01-08T07:29:25.457 に答える
0

簡単な答えは、カスタムの日付形式を使用しないことです。常に.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" />
于 2013-09-04T01:48:23.120 に答える