Format datetime dans asp.net mvc 4
Comment puis-je forcer le format datetime dans asp.net mvc 4 ?
En mode d'affichage, il montre ce que je veux mais en modifier le modèle, il ne le fait pas.
Je suis en utilisant la méthode displayfor et editorfor et applyformatineditmode=true avec dataformatstring="{0:jj/MM/aaaa}"
Ce que j'ai essayé:
- la mondialisation dans le web.config (les deux) avec ma culture et de uiculture.
- la modification de la culture et de la uiculture dans application_start()
- personnalisé modelbinder pour datetime
Je n'ai aucune idée de comment le forcer et j'ai besoin de saisie de la date sous la forme jj/MM/aaaa pas la valeur par défaut.
PLUS D'INFOS:
mon viewmodel est comme ça
[DisplayName("date of birth")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? Birth { get; set; }
j'ai utiliser @Html.DisplayFor(m=>m.Birth)
mais cela fonctionne comme prévu (je vois la mise en forme)
et à l'entrée de la date-je utiliser @Html.EditorFor(m=>m.Birth)
mais si j'essaie d'entrée et de quelque chose comme 13/12/2000 est échoue avec le message d'erreur qu'il n'est pas une date valide (12/13/2000 et 2000/12/13 fonctionnent comme prévu mais j'ai besoin de jj/MM/aaaa).
La coutume modelbinder est appelé dans application_start() b/c je ne sais pas où d'autre.
À l'aide de <globalization/>
j'ai essayé avec culture="ro-RO", uiCulture="ro"
et d'autres cultures, qui me donnerait jj/MM/aaaa.
J'ai aussi essayé de mettre dans un thread dans application_start() (il y a beaucoup d'exemples ici, sur la façon de le faire)
Pour tous qui lisez cette question:
Il semble que Darin Dimitrov la réponse de travailler aussi longtemps que je n'ai pas de validation du client.
Une autre approche est d'utiliser de validation personnalisée, y compris la validation côté client.
Je suis heureux que j'ai trouvé avant de recréer l'ensemble de l'application.
- Pourriez-vous nous fournir un peu plus d'info? Votre modèle, le contrôleur et la vue? Fournir un exemple de la sortie différents et vous obtenez entre l'écran et l'éditeur de modèle. Notez aussi que la culture est définie par thread. Vous avez mentionné quelque chose à propos de
Application_Start
mais ce n'est exécutée qu'une seule fois, au démarrage de votre application. Que sur les demandes ultérieures? Comment faites-vous la définition de la culture pour eux? - application_start dans exécutée qu'une seule fois! Utilisation application_beginRequest à la place!
- Nas, où serait application_beginRequest être ? Je ne vois application_start Mondiale. Dans mvc 4 choses ont commencé à être un peu différente, alors mvc 3
Vous devez vous connecter pour publier un commentaire.
Ahhhh, maintenant, c'est clair. Vous semblez avoir des problèmes de liaison de la valeur. Pas à l'afficher sur la vue. En effet, c'est la faute du modèle de classeur par défaut. Vous pouvez écrire et d'utiliser un programme personnalisé qui prendra en considération le
[DisplayFormat]
attribut sur votre modèle. J'ai illustré un tel modèle de liaison personnalisé ici: https://stackoverflow.com/a/7836093/29407Apparemment, certains problèmes persistent toujours. Voici mon installation fonctionne parfaitement bien sur les deux ASP.NET MVC 3 & 4 RC.
Modèle:
Contrôleur:
Vue:
Enregistrement du modèle de liaison personnalisé dans
Application_Start
:Et le modèle de classeur lui-même:
Maintenant, peu importe ce que la culture de la configuration de votre site web.config (
<globalization>
élément) ou le thread en cours de culture, le modèle de classeur de l'utilisation de laDisplayFormat
attribut de format de date lors de l'analyse nullable dates.DateTime
etDatTime?
types?Client les questions de validation peut se produire en raison de la MVC bug (même en MVC 5) dans jquery.validate.unobtrusive.min.js qui n'accepte pas la date/datetime format d'une manière. Malheureusement, vous avez à résoudre manuellement.
Ma dernière solution de travail:
Vous avez à faire avant:
Vous pouvez installer moment.js aide:
Grâce Darin,
Pour moi, être capable de poster sur la méthode de création, Il n'a travaillé que après j'ai modifié le BindModel code :
Espère que cela pourrait aider quelqu'un d'autre...