2014-12-04 12 views
5

Używam jquery datepicker w moim modelu widokujQuery UI datepicker i MVC widok modelu typu datetime

Oto mój widok:

@Html.TextBoxFor(o => o.JobStartDate, new { id = "dt1", @class = "input-block-level" }) 
@Html.ValidationMessage("JobStartDate") 

i mój skrypt:

$("#dt1").datepicker({ dateFormat: "dd/mm/yy" }); 

Wszystko działa dobrze, jeśli moja data to < = 12, jeśli moja data jest dłuższa niż 12, pokaże mi komunikat o błędzie z potwierdzeniem, że "Data rozpoczęcia pola musi być datą". (Używam poprawności jquery)

Na przykład: data 16/12/2014 da mi błąd podczas 12.12.2014 nie będzie

Oto mój widok model:

[Required] 
[DataType(DataType.Date)] 
[Display(Name = "Start Date")] 
public DateTime JobStartDate { get; set; } 

Podejrzewam, że mój model widoku przewiduje datę w formacie mm/dd/rrrr, podczas gdy w moim datepicker i dd/mm/rr, jest sposób, aby powiedzieć mój viewmodel, że spodziewam się formatu dd/mm/yy tak, aby nie wyświetlał komunikatu o błędzie, jeśli data jest> = 12.

Odpowiedz

12

Możesz zajrzeć pomocą jquery globalize lub dodać następujące skryptu (zakładając oczywiście, że format daty kultura serwer jest „dd/MM/yyy”)

$.validator.addMethod('date', function (value, element) { 
    if (this.optional(element)) { 
    return true; 
    } 
    var valid = true; 
    try { 
    $.datepicker.parseDate('dd/mm/yy', value); 
    } 
    catch (err) { 
    valid = false; 
    } 
    return valid; 
}); 
$('#dt1').datepicker({ dateFormat: 'dd/mm/yy' }); 

i skorzystaj @Html.ValidationMessageFor(m => m.JobStartDate)

-2

Będziesz musiał stworzyć cust om walidator. Trzeba zmodyfikować swoją nieruchomość do podjęcia ciąg znaków, zamiast jak to

public string JobStartDate {get; set; } 

będziesz musiał stworzyć swój własny walidator jak ten

public class CheckDateAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) { 
     // Validate your Date here 
    } 
} 

Po tym będzie po prostu ozdobić swoją nieruchomość jako taki -

[CheckDate] 
public string JobStartDate {get; set;} 

Oto dobry tutorial custom validators

+2

To nie robi poprawności po stronie klienta (i na pewno nie rozwiąże pytanie OP) i nigdy nie powinno się używać 'string' na randkę! –

0

Tutaj MVC View model:

public DateTime? date { get; set; } 

jest to dla skryptu:

$('.DatePickers').datetimepicker({ 
     timepicker: false, 
     format: 'd-M-Y', 
     scrollInput: false, 
     closeOnDateSelect: true 
    }); 

przyciśnięcie wydarzeniem dla readonly wyboru daty

$(".DatePickers").keypress(function (event) { event.preventDefault(); });