2014-01-10 45 views
8

我有以下的控制:你如何使一個劍道datepicker日期驗證的最低日期?

@(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,而是使用了一個錯誤列表,但是你的代碼也可以工作,所以我會加註它。它只是在我使用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只是因爲它們是默認的,也不是自定義的。正如我所理解mvcdate規則具有最高的優先級,因爲:

  • dateValidation規則已被跳過了一定的控制,我得到了「必須是日期」錯誤
  • date規則已通過與真實結果,但我仍然得到'必須是日期'錯誤
  • mvcdate規則幫助我一個人。

你總是可以看看kendoValidator在控制檯:

kendoValidator debugger