La valeur spécifiée n'est pas conforme au format aaaa-MM-jj
J'ai un .Net MVC 5 application à l'aide d'Annotations de Données, Entity Framework Jquery 2.1.3 et Jquery UI 1.11.4.
Quand je le rendu d'un formulaire d'édition avec un input de type date en utilisant le royaume-UNI format "jj/MM/AAAA"; le message d'erreur suivant s'affiche lorsque vous utilisez Google Chrome:
La valeur spécifiée '10/10/2001' n'est pas conforme à la forme "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; }
}
Marquer
<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 d'entrée, mais la date n'apparaît pas dans le navigateur. J'ai d'abord pensé que c'était un problème avec jQuery comme c'est l'apparition de l'jQuery fichier de script, mais lors de l'essai de IE et Firefox, tout fonctionne bien.
J'ai alors cru que c'était mes paramètres régionaux dans google chrome en tant que par défaut de Chrome pense que tout le monde l'anglais est en Amérique, j'ai changé les paramètres régionaux au royaume-UNI et toujours le même problème apparaît.
Une solution simple serait de changer le format de mon modèle universel, mais pour les utilisateurs du royaume-UNI c'est un peu exotiques.
Est-il un moyen de dire à google chrome qui acceptent les formats de la date en "dd/MM/YYYY"?
- Êtes-vous désireux de rendre les navigateurs HTML5 datepicker de mise en œuvre (ou êtes-vous à l'aide d'un plugin jquery)?
- Je vous suggère d'utiliser
datepicker ui
de sorte que le format ISO est envoyé sur le serveur pendant quedd/MM/dddd
sera configuré à côté client. - J'allais laisser le navigateur manipuler le sélecteur de date, donc il y a moins besoin d'une troisième partie de la bibliothèque.
- Si vous utilisez le navigateur datepicker, votre besoin de spécifier l'attribut comme
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyInEditMode = true)]
. Le navigateur va alors afficher la valeur dans les navigateurs les paramètres régionaux, mais après revenir le format ISO de sorte qu'il sera correctement lié. Mais note que c'est uniquement pris en charge dans les navigateurs modernes. - Faire cela rend également la date dans le format universel lors de l'utilisation de méthode displayfor() méthode d'assistance
- Effet secondaire malheureux, mais la spécification html5, c'est qu'il doit être au format ISO. L'alternative est d'utiliser
@Html.TextBoxFor(m => m.MyDate, ""{0:yyyy-MM-dd}", new { @type="date" })
et de laisser le[DisplayFormat]
comme est. - Merci, maintenant il prend tout son sens. S'il vous plaît pouvez-vous mettre vos commentaires dans une réponse et je serai heureux de les accepter. Je vais juste remplacer la valeur par défaut DateTime modèle d'affichage la plus récente de la culture ou de force au royaume-UNI format.
Vous devez vous connecter pour publier un commentaire.
Les spécifications du HTML5 sélecteur de date que la date doit être au format
yyyy-MM-dd
(format ISO). Cela signifie que vousDisplayFormatAttribute
doit êtreAlternativement, vous pouvez ajouter manuellement le format à l'aide de
La dernière option permet de conserver le
DataFormatString = "{0:dd/MM/yyyy}")
pour une utilisation dans@Html.DisplayFor()
[DisplayFormat]
causes jQuery pour réinitialiser le terrain et de donner une valeur non valide message dans la console. La mise en forme dansTextBoxFor
résout cette erreur (et me permet d'appliquer mon masque de plugin), mais toujours à l'affiche la date au format ISO. Sur domReady, je déplace les valeurs autour de l'utilisation de l'Amérique de mise en forme.[DisplayFormat]
et jQuery sont pas de toute façon (il ne se réinitialise pas une valeur), et cette question/réponse concerne les navigateurs HTML-5 datepicker de mise en œuvre (il n'a rien à voir avec un masque de plugin). Si votre avoir un problème, alors à poser une nouvelle question avec plus de détailsApplyFormatInEditMode = true
est utilisé pour garder le format dans@Html.EditorFor()
droit? ensuite, howcome j'obtiens toujours cette erreur (l'un dans la question) dans la console lors de la tentative de combler un@Html.EditorFor()
avec unDateTime
et[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
.... Des idées? ou je confondsEdit mode
avec quelque chose d'autre?La question pourrait être du type="date". C'était ma situation, de toute façon. Travaillé une fois qu'il a été modifié pour type="texte". Si l'interface est construite avec un MVC wrapper, vous avez besoin de remplacer ou de définir l'attribut html en conséquence.
Vous pouvez utiliser le InputTagHelper.Format
https://docs.asp.net/projects/api/en/latest/autoapi/Microsoft/AspNetCore/Mvc/TagHelpers/InputTagHelper/#prop-Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Format
J'aimerais souligner quelque chose dans la réponse ici.
Si vous construisez une application qui a de la Mondialisation et de la Localisation de la méthode de transmission dans un format à l'aide d'un helper Html sera mieux. Vous pouvez aussi simplement utiliser EditorFor et passer les id ou une classe pour datepicker.
Définir la
type
attribut de texte.