Asp.net-MVC permet désormais la liaison implicite d'objets DateTime. J'ai une action du genre
public ActionResult DoSomething(DateTime startDate)
{
...
}
Cela convertit avec succès une chaîne d'un appel ajax en un DateTime. Cependant, nous utilisons le format de date jj / MM / aaaa; MVC convertit en MM / jj / aaaa. Par exemple, la soumission d'un appel à l'action avec une chaîne «09/02/2009» entraîne un DateHeure de «02/09/2009 00:00:00», ou le 2 septembre dans nos paramètres locaux.
Je ne veux pas rouler mon propre classeur de modèle pour un format de date. Mais il semble inutile de changer l'action pour accepter une chaîne, puis d'utiliser DateTime.Parse si MVC est capable de le faire pour moi.
Existe-t-il un moyen de modifier le format de date utilisé dans le classeur de modèle par défaut pour DateTime? Le classeur de modèles par défaut ne devrait-il pas utiliser vos paramètres de localisation de toute façon?
la source
Réponses:
Je viens de trouver la réponse à cela avec un googling plus exhaustif:
Melvyn Harbour explique en détail pourquoi MVC fonctionne avec les dates comme il le fait et comment vous pouvez remplacer cela si nécessaire:
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx
la source
MM/dd/yyyy
format sinon il affiche une erreur de validationThe field BeginDate must be a date.
, comment puis-je faire en sorte que le serveur accepte ledd/MM/yyyy
format?Je définirais globalement vos cultures. ModelBinder ramasse ça!
Ou vous changez simplement cela pour cette page.
Mais globalement, dans web.config, je pense que c'est mieux
la source
J'ai eu le même problème avec la liaison de format de date courte aux propriétés du modèle DateTime. Après avoir examiné de nombreux exemples différents (pas seulement concernant DateTime), j'ai rassemblé les éléments suivants:
Pour conserver la façon dont les routes, etc. sont enregistrées dans le fichier Global ASAX, j'ai également ajouté une nouvelle classe sytatique au dossier App_Start de mon projet MVC4 nommé CustomModelBinderConfig:
J'appelle ensuite simplement les RegisterCustomModelBinders statiques de mon Global ASASX Application_Start comme ceci:
Une note importante ici est que si vous écrivez une valeur DateTime dans un champ caché comme celui-ci:
Je l'ai fait et la valeur réelle sur la page était au format "MM / jj / aaaa hh: mm: ss tt" au lieu de "jj / MM / aaaa hh: mm: ss tt" comme je le voulais. Cela a fait échouer la validation de mon modèle ou renvoyer la mauvaise date (en échangeant évidemment les valeurs du jour et du mois).
Après beaucoup de grattage et de tentatives infructueuses, la solution consistait à définir les informations de culture pour chaque demande en procédant ainsi dans le Global.ASAX:
Cela ne fonctionnera pas si vous le collez dans Application_Start ou même Session_Start car cela l'assigne au thread actuel de la session. Comme vous le savez bien, les applications Web sont sans état, de sorte que le fil de discussion qui a traité votre demande précédemment n'est pas le même fil de service que votre demande actuelle, par conséquent, vos informations de culture sont allées au grand GC dans le ciel numérique.
Merci à: Ivan Zlatev - http://ivanz.com/2010/11/03/custom-model-binding-using-imodelbinder-in-asp-net-mvc-two-gotchas/
garik - https://stackoverflow.com/a/2468447/578208
Dmitry - https://stackoverflow.com/a/11903896/578208
la source
Ce sera légèrement différent dans MVC 3.
Supposons que nous ayons un contrôleur et une vue avec la méthode Get
Nous devrions ajouter ModelBinder
et la commande dans Application_Start () de Global.asax
la source
IModelBinder
, en particulier en ce qui concerne la validation. En outre, cela ne fonctionne que si le nom deDateTime
est dateTime .DateTime?
ne fonctionne que si vous ajoutez un autre appel àModelBinders.Binders.Add
avectypeof(DateTime?)
.Il convient également de noter que même sans créer votre propre classeur de modèles, plusieurs formats différents peuvent être analysables.
Par exemple, aux États-Unis, toutes les chaînes suivantes sont équivalentes et sont automatiquement liées à la même valeur DateTime:
Je suggère fortement d'utiliser aaaa-mm-jj car il est beaucoup plus portable. Vous ne voulez vraiment pas gérer la gestion de plusieurs formats localisés. Si quelqu'un réserve un vol le 1er mai au lieu du 5 janvier, vous allez avoir de gros problèmes!
NB: Je ne sais pas exactement si aaaa-mm-jj est universellement analysé dans toutes les cultures, alors peut-être que quelqu'un qui sait peut ajouter un commentaire.
la source
Essayez d'utiliser toISOString (). Il renvoie une chaîne au format ISO8601.
Méthode GET
javascript
c #
Méthode POST
javascript
c #
la source
J'ai défini la configuration ci-dessous sur mon MVC4 et cela fonctionne comme un charme
la source
la source
la source
J'ai défini
CurrentCulture
etCurrentUICulture
mon contrôleur de base personnaliséla source