Comment définir les séparateurs décimaux dans ASP.NET contrôleurs MVC?
Je travaille avec le NerdDinner demande d'essayer de m'enseigner ASP.NET MVC. Cependant, je suis tombé sur un problème avec la mondialisation, où mon serveur présente les nombres à virgule flottante avec une virgule comme séparateur décimal, mais Virtual Earth map exige d'eux avec des points, ce qui cause certains problèmes.
J'ai déjà résolu le problème avec la cartographie de JavaScript dans mon point de vue, mais si j'essaie maintenant de post édité un dîner entrée avec des points comme séparateur décimal le contrôleur tombe en panne (lancer InvalidOperationException
) lors de la mise à jour du modèle (dans le UpdateModel()
metod). Je me sens comme je dois définir la bonne culture, quelque part dans le controller, je l'ai essayé dans OnActionExecuting()
mais cela n'a pas aidé.
Vous devez vous connecter pour publier un commentaire.
J'ai juste revenu à la charge dans un projet réel, et a finalement trouvé une solution qui fonctionne. La bonne solution est d'avoir un modèle de liaison personnalisé pour le type
decimal
(etdecimal?
si vous les utilisez):Puis Mondiale.asax.cs dans Application_Start():
Notez que le code n'est pas le mien, j'ai effectivement trouvé à Kristof Neirynck blog ici. J'ai juste modifié quelques lignes et je suis l'ajout de liant un type de données spécifique, ne remplacez pas le classeur par défaut.
Dans votre site web.config
Vous semble être l'aide d'un serveur d'installation avec un langage qui utilise des virgules au lieu de décimales. Vous pouvez ajuster la culture, qui utilise la virgule en sorte que votre application est conçue, tels que les en-US.
Pouvez-vous analyser le texte à l'aide de l'invariant de la culture - désolé, je n'ai pas le NerdDinner code en face de moi, mais si vous êtes de passage dans le point-virgules décimales que l'analyse devrait être OK si vous le dites à utiliser l'invariant de la culture. E. g.
Modifier. Je pense que c'est un bug dans le NerdDinner code par la façon dont, dans le même sens que votre problème précédent.
J'ai un différent sur ce, vous pourriez, comme. Ce que je n'aime pas accepté la réponse est qu'il ne vérifie pas pour les autres personnages. Je sais qu'il y aura un cas où le symbole de la devise sera dans la boîte parce que mon utilisateur ne sait pas mieux. Donc oui je peux vérifier en javascript pour l'enlever, mais si pour une raison quelconque javascript n'est-ce pas? Puis des caractères supplémentaires pourraient passer à travers. Ou si quelqu'un essaie de vous spam passant inconnu des personnages... qui sait! J'ai donc décidé d'utiliser une regex. C'est un peu plus lent, minuscule fraction plus lente pour mon cas, c'était 1 000 000 d'itérations de l'expression régulière a pris un peu moins de 3 secondes, pendant environ 1 seconde pour faire une chaîne de remplacer dans un coma et de la période. Mais, voyant que je ne sais pas quels personnages pourraient venir à travers, alors je suis heureux de cette moindre de performances.
En gros, supprimer tous caractères qui ne sont pas des chiffres, pour une chaîne qui n'est pas vide. Convertir en décimal. Diviser par 100. Résultat de retour.
Fonctionne pour moi.