2014-01-10 2 views
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フィールドは日付でなければなりません。"このミステリーメッセージはどこから来ていますか?なぜ私がバリデーターに入れたメッセージプロパティーを使用していないのですか?私が望むのは、有効でない日付形式が許可されず、日付が過去でないことです。だから、最小限の執行が必要です。

+0

あなたはDataAnnotationsまたはFluentValidationを介してサーバ側の検証を使用していますか? –

+0

私は私の言う限りではどちらも使用していませんか? – hyprsleepy

答えて

7

このコードは正常に動作するようです:ここで

$("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

+0

私はkendoValidatorを使用せず、代わりにエラーリストを使用しましたが、あなたのコードもうまく動作するので、私はそれをupvoteします。私はkendoValidatorを使用するときにエラーメッセージのテキストを他のフォームと同じように置くだけで、代わりに中央の場所に置く必要があります。 – hyprsleepy

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ルールが下を持っていますdatemvcdateはデフォルトであり、カスタムではないからです。ルールは、特定のコントロールのためにスキップされていて、私は「日付でなければなりません」というエラーを得た

  • dateルールがTRUEに渡された

    • dateValidation:私は理解してきたようにのでmvcdateルールは、最も高い優先度を持っています結果は残っていますが、私はまだ '日付にする必要があります'というエラーを受け取りました。
    • mvcdateルールが私を助けました。

    あなたは、常にコンソールにkendoValidatorに見ることができます。

    kendoValidator debugger