2015-06-12 7 views
30

Possiedo un'applicazione .Net MVC 5 che utilizza Annotazioni dati, Entity-Framework Jquery 2.1.3 e Jquery UI 1.11.4.Il valore specificato non è conforme al formato richiesto yyyy-MM-dd

Quando si esegue il rendering di un modulo di modifica con un input di tipo data utilizzando il formato UK "gg/MM/AAAA"; viene visualizzato il seguente messaggio di errore quando si utilizza Google Chrome:

Il valore specificato '10/10/2001 'non è conforme al formato richiesto,' aaaa-MM-gg '. jquery-2.1.3.js: 5317

Modello

public class MyModel 
{ 
    [Column(TypeName = "date"), DataType(DataType.Date), Display(Name = "My date")] 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] 
    public string MyDate { get; set; } 
} 

Mark up

<input class="text-box single-line" data-val="true" data-val-date="The field My date must be a date." id="MyDate" name="MyDate" type="date" value="10/10/2001" /> 

Il valore è impostato correttamente nel controllo di input, ma la data non lo fa compaiono nel browser. Per prima cosa ho pensato che si trattasse di un problema con jQuery visto che appare nel file di script jQuery, ma quando si esegue il test in IE e Firefox tutto funziona correttamente.

Ho quindi pensato che fosse la mia impostazione regionale in chrome, poiché per impostazione predefinita Chrome ritiene che tutti gli inglesi siano in America, ho cambiato le impostazioni internazionali nel Regno Unito e ancora lo stesso problema appare.

Una semplice soluzione sarebbe quella di cambiare il formato nel mio modello in universale, ma per gli utenti del Regno Unito questo è un po 'alieno.

C'è un modo per dire chrome che accettano i formati di data in "gg/MM/AAAA"?

+0

Si desidera eseguire il rendering dell'applicazione Datepicker HTML5 del browser (o si sta utilizzando un plug-in jquery)? –

+0

Ti suggerisco di usare 'datepicker ui' in modo che il formato ISO sia inviato al server mentre' dd/MM/dddd' sarà configurato sul lato client. – Bellash

+0

@StephenMuecke Stavo per lasciare che il browser gestisse il selezionatore di date, quindi c'è una necessità in meno per una libreria di terze parti. –

risposta

41

Le specifiche per il selettore di date HTML5 indicano che la data deve essere nel formato yyyy-MM-dd (formato ISO). Ciò significa che si DisplayFormatAttribute necessario essere

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
public string MyDate { get; set; } 

In alternativa, è possibile aggiungere manualmente il formato utilizzando

@Html.TextBoxFor(m => m.MyDate, "{0:yyyy-MM-dd}", new { @type = "date" }) 

L'opzione più tardi consente di mantenere il DataFormatString = "{0:dd/MM/yyyy}") per l'utilizzo in @Html.DisplayFor()

+0

C'è qualche soluzione meno rischiosa che usare JS per riformattare la finestra dopo aver caricato la pagina? '[DisplayFormat]' fa in modo che jQuery ripristini il campo e fornisca un messaggio di valore non valido nella console. La formattazione in 'TextBoxFor' risolve questo errore (e mi consente di applicare il mio plug-in maschera), ma visualizza comunque la data in formato ISO. Su domReady, sposto i valori per usare la formattazione americana. – Sinjai

+0

@Sinjai, Mi dispiace, non capisco il tuo commento. '[DisplayFormat]' e jQuery non sono correlati in alcun modo (non resetterà un valore), e questa domanda/risposta er si riferisce all'implementazione datapicker HTML-5 del browser (non ha nulla a che fare con un plugin maschera). Se hai un problema, allora fai una nuova domanda con i dettagli rilevanti –

+0

Sì, probabilmente troppo per un commento a parte. Non ho un modo migliore di esprimerlo per una domanda, però. jQuery viene utilizzato nei progetti MVC di ASP.NET per la convalida e presumo che ciò che sta facendo impazzire. Console dice solo che l'errore ha origine in jquery-version.js. Non preoccuparti per questo – Sinjai

Problemi correlati