2014-01-10 10 views
8

Ich habe die folgende Regelung:Wie lässt ein Kendodepicker die Datumsvalidierung für ein Mindestdatum durchführen?

@(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)                
) 

Und die folgende 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!" 
    } 
}); 

Als ich das testen und in einem ungültigen Datum eingeben die Meldung die ich erhalte, nicht das, was ich erwarte. Stattdessen ist es "Das Feld Fälligkeitsdatum muss ein Datum sein." Woher kommt diese mysteriöse Nachricht und warum verwendet sie nicht die Nachrichteneigenschaft, die ich in den Validator gelegt habe? Ich will nur, dass ungültige Datumsformate nicht erlaubt sind und das Datum nicht in der Vergangenheit liegt. Also muss ein Minimum durchgesetzt werden.

+0

Sind Sie serverseitige Validierung über DataAnnotations oder FluentValidation mit? –

+0

Ich benutze weder so weit wie ich sagen kann? – hyprsleepy

Antwort

7

Dieser Code scheint gut zu funktionieren:

$("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" 
    } 
}); 

Hier ist eine Live-Demo: http://jsbin.com/EvoroRe/1/edit

+0

Ich habe den KendoValidator nicht benutzt und stattdessen eine Fehlerliste benutzt, aber Ihr Code würde auch funktionieren, also werde ich ihn upvoten. Es setzt den Fehlermeldungstext einfach in die Art der anderen Formulare, wenn ich den kendoValidator benutze und ich stattdessen an einem zentralen Ort wollte. – hyprsleepy

0

Ich schlage vor, die mvcdate Regel hinzuzufügen:

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'); 
    } 
} 

Unfortunatelly dateValidation Regel eine niedrigere hat Priorität, dass date und mvcdate nur weil sie Standard und noch benutzerdefinierte sind. Wie ich die mvcdate Regel verstanden habe, hat die höchste Priorität, weil:

  • dateValidation Regel für die bestimmte Steuerung übersprungen worden ist, und ich habe den Fehler ‚ein Datum sein muss‘
  • date Regel mit der TRUE übergeben worden ist, Ergebnis, aber ich habe immer noch die "muss ein Datum sein" Fehler
  • mvcdate Regel hat mir allein geholfen.

Sie immer auf die kendoValidator in der Konsole aussehen:

kendoValidator debugger