web-dev-qa-db-fra.com

La valeur spécifiée n'est pas conforme au format requis aaaa-MM-jj

J'ai une application .Net MVC 5 utilisant Data Annotations, Entity-Framework Jquery 2.1.3 et Jquery UI 1.11.4. 

Lorsque je présente un formulaire de saisie avec une entrée de type date au format britannique "jj/mm/aaaa"; le message d'erreur suivant apparaît lors de l'utilisation de Google Chrome:

La valeur spécifiée "10/10/2001" n'est pas conforme au format requis, "aaaa-MM-jj". jquery-2.1.3.js: 5317

Modèle

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

Marquez

<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" />

La valeur est définie correctement dans le contrôle de saisie, mais la date n'apparaît pas dans le navigateur. J'ai d'abord pensé que c'était un problème avec jQuery car il apparaissait dans le fichier de script jQuery, mais lors des tests dans IE et Firefox, tout fonctionne correctement.

J'ai ensuite supposé que c'était mon réglage régional en chrome car par défaut, Chrome pense que tout l'anglais est en Amérique, j'ai changé le réglage régional en Royaume-Uni et le même problème apparaît.

Une solution simple consisterait à modifier le format de mon modèle en mode universel, mais pour les utilisateurs britanniques, c'est un peu étrange.

Existe-t-il un moyen d'indiquer à Chrome que les formats de date acceptés sont "jj/mm/aaaa"?

37
Andy Clark

Les spécifications du sélecteur de date HTML5 indiquent que la date doit être au format yyyy-MM-dd (format ISO). Cela signifie que vous DisplayFormatAttribute doit être

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

Alternativement, vous pouvez ajouter manuellement le format en utilisant

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

La dernière option vous permet de conserver le DataFormatString = "{0:dd/MM/yyyy}") pour l'utiliser dans @Html.DisplayFor() 

48
user3559349
2
M. Ruiz

Le problème pourrait provenir du type = "date". C'était ma situation quand même. Travaillé une fois il a été changé en type = "text". Si l'interface est construite avec un wrapper MVC, vous devez remplacer ou définir l'attribut html en conséquence.

2
Petre Ionescu

Définissez l'attribut type sur text.

@Html.TextBoxFor(m => m.MyDate, new { @type = "text"  })
0
devlin carnate

J'aimerais souligner quelque chose dans la réponse ici.

Si vous construisez une application comportant la globalisation et la localisation, la méthode de passage au format utilisant un assistant HTML sera meilleure. Vous pouvez également simplement utiliser EditorFor et transmettre l'id ou la classe nécessaire pour datepicker.

0
user3357031