2

Résumé: Gestion automatique d'un "int?" Par DataAnnotation est de me faire repenser en les utilisant du tout. Peut-être qu'il me manque quelque chose et une solution facile, mais je ne peux pas coopérer avec DataAnnotations. J'ai une propriété publique avec mon propre attribut de validation personnalisé:DataAnnotations La gestion automatique de int provoque un roadblock

[MustBeNumeric(ErrorMessage = "Must be a number")] 
public int? Weight { get; set; } 

Le point de l'attribut de validation personnalisée est de faire une vérification rapide pour voir si l'entrée est numérique et affiche un message d'erreur approprié. Le problème est que lorsque DataAnnotations essaie de lier une chaîne à l'int? est automatiquement ne valide pas et affiche un "La valeur 'asdf' n'est pas valide pour le poids."

Pour la vie de moi, je ne peux pas empêcher DataAnnotations de gérer cela afin que je puisse en prendre soin dans mon attribut personnalisé.

Cela semble être un scénario populaire (pour valider l'entrée en numérique) et je suppose qu'il existe une solution facile, mais je ne l'ai trouvé nulle part.

+0

Ouais, même des choses simples comme celui-ci pourrait devenir un véritable PITA. –

Répondre

0

Voici une solution de contournement (car je n'appellerais pas vraiment cela une solution). Ajoutez un fichier Messages.resx dans le dossier App_GlobalResources de votre application Web. Ajouter la ressource suivante à l'intérieur:

Key: PropertyValueInvalid 
Value: {0} Must be a number 

Dans la méthode Application_Start de Global.asax ajouter ce qui suit:

DefaultModelBinder.ResourceClassKey = "Messages"; 
+0

Yikes. Pas exactement transparent. Je suis tenté de changer ces propriétés sur ma vue des modèles qui sont des chaînes de caractères. Ensuite, je peux les exécuter via les validations DataAnnotations ainsi que quelques attributs personnalisés et s'ils sont bons pour les convertir en un int quand je mappe du modèle de vue à l'entité. À votre avis, cela ressemble-t-il à une solution décente? –

+0

thx pour la perspicacité. –