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"?
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()
Vous pouvez utiliser le InputTagHelper.Format
<input asp-for="MyDate" asp-format="{0:yyyy-MM-dd}" />
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.
Définissez l'attribut type
sur text.
@Html.TextBoxFor(m => m.MyDate, new { @type = "text" })
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.