8

私は次のコントロールを持っています:

@(Html.Kendo().DatePickerFor(model => model.Attributes.DueDate)
    .HtmlAttributes(new { 
        ID = "idSurvey_DueDate", 
        @data_bind = "value: DueDate", 
        @Class = "report-label datepicker surveyAttributesData", 
        TabIndex = 3 })
    .Min(DateTime.Now)                                                            
)

そして、次のjquery:

$("#idSurvey_DueDate").kendoValidator({
    rules: {
        dateValidation: function (e) {
            var currentDate = kendo.parseDate($(e).val());
            // Check if date parse was successful
            if (!currentDate) {
                return false;
            }
            return true;
        }
    },
    messages: {
        dateValidation: "Invalid Date!",
        min: "Date must not be in the past!"
    }
});

これをテストして無効な日付を入力すると、予期したものとは異なるメッセージが表示されます。代わりに、「フィールド DueDate は日付でなければなりません」です。この謎のメッセージはどこから来ているのですか? また、バリデーターに入力したメッセージ プロパティを使用していないのはなぜですか? 私が望むのは、無効な日付形式を許可しないことと、日付が過去のものであってはならないことだけです。したがって、最低限のルールを適用する必要があります。

4

3 に答える 3

8

このコードはうまくいくようです:

$("form").kendoValidator({
  rules: {
    dateValidation: function(element) {
      var value = $(element).val();

      var date = kendo.parseDate(value);
      if (!date) {
        return false;
      }

      return true;
    },
    minDate: function(element) {
      var value = $(element).val();

      var date = kendo.parseDate(value);

      var result = date >= new Date();

      return result;
    }
  },
  messages: {
    dateValidation: "You must enter a date",
    minDate: "The date must not be in the past"
  }
});

これがライブデモです: http://jsbin.com/EvoroRe/1/edit

于 2014-01-11T07:39:04.387 に答える
0

mvcdateルールを追加することをお勧めします:

rules: {
    mvcdate: function (input) {
        var datarole = $(input).data('role');
        if (datarole === 'datepicker') {
            var value = $(input).val();
            if (value) {
                var date = kendo.parseDate(value, 'ddd, MMM d');
                if (!date) {
                    return false;
                }
            }
        }

        return true;
    }
},
messages: {
    mvcdate: function (intput) {
        return intput.attr('data-val-date');
    }
}

残念ながら、ルールはデフォルトでもカスタムでもないという理由だけで、dateValidation優先度が低くなります。私が理解しているように、次の理由により、ルールが最も優先されます。datemvcdatemvcdate

  • dateValidation特定のコントロールのルールがスキップされ、「日付である必要があります」というエラーが表示されました
  • dateルールは TRUE の結果で渡されましたが、「日付である必要があります」というエラーが引き続き表示されます
  • mvcdateルールは私を一人で助けてくれました。

コンソールで kendoValidator をいつでも確認できます。

kendoValidator デバッガー

于 2015-06-18T00:53:03.707 に答える
0

受け入れられた回答以降、剣道バリデーターが変更されたかどうかはわかりませんが、除外して日付検証のみを日付ピッカー入力に適用することをお勧めします。そうしないと、テキストボックスまたはその他の入力によって、無効な日付に関するエラー メッセージが生成されます。ルールは次のようになります

$("#modForm").kendoValidator({
    rules: {
        dateValidation: function (input) {
            if (input.is('[data-role="datepicker"]')) {
                var value = $(input).val();

                var date = kendo.parseDate(value);
                if (!date) {
                    return false;
                }
            }
            return true;
        }
    },
    messages: {
        dateValidation: "You must enter a date",
    }
});
于 2019-07-29T16:21:05.853 に答える