2014-12-04 15 views
5

Sto usando jQuery datepicker il mio punto di vista del modellojQuery UI datepicker e vista MVC tipo di modello datetime

Ecco mio punto di vista:

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

e il mio script:

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

Tutto funziona bene se la mia data è < = 12, se la mia data è superiore a 12, verrà visualizzato un messaggio di errore di convalida che dice "Il campo Data di inizio deve essere una data." (Sto usando jQuery convalida)

Ad esempio: data 16/12/2014 mi darà l'errore mentre 2014/12/12 non si

Ecco la mia vista del modello:

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

Sospetto che il mio modello di visualizzazione stia anticipando una data nel formato mm/gg/aaaa mentre sul mio datepicker ho specificato gg/mm/aa, c'è un modo per dire al mio viewmodel che mi aspetto il formato gg/mm/aa in modo che non venga visualizzato un messaggio di errore se la data è> = 12.

risposta

12

Potete guardare utilizzando il jquery globalize o aggiungere il seguente allo script (assumendo ovviamente che il formato server di data di cultura è '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' }); 

e utilizzare @Html.ValidationMessageFor(m => m.JobStartDate)

-2

Sarà necessario creare un cust om validatore. È necessario modificare la vostra proprietà di prendere un valore di stringa invece come questo

public string JobStartDate {get; set; } 

Sarà quindi necessario creare il validatore personalizzato come questo

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

Dopo questo sarà solo decorare la vostra proprietà in quanto tale -

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

Ecco un buon tutorial su custom validators

+2

Questo non rende la convalida lato client (e certamente wont risolvere questione OP) e non si dovrebbe mai usare 'STRING' per una data! –

0

Qui MVC View Modello:

public DateTime? date { get; set; } 

Questo è per script:

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

evento Pressione per la data di sola lettura picker

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