Question

Je suis en train de trouver la meilleure façon de valider les données dans une application MVC C # et xVal semblait être le meilleur ajustement. Cependant, je suis en cours d'exécution dans un problème avec la validation de type de données.

Au début, je faisais un UpdateModel dans le DTO, puis en exécutant la validation sur le DTO. Cela a fonctionné pour des choses comme une grande champs obligatoires, mais UpdateModel jetterait une exception si vous avez essayé, par exemple, pour mapper une chaîne ( « asd ») dans un champ décimal. Depuis UpdateModel devait être couru avant qu'il y ait des données pour valider Je ne savais pas comment contourner cette difficulté.

Ma solution a été de créer un DTO par formulaire qui UpdateModel copiait dans la validation de fonctionner à ce sujet, puis copier les valeurs sur dans les DTO appropriées. Tous les attributs de la forme DTO seraient cordes si jamais UpdateModel bombes, et j'appliquer la validation avaient des données par xVal. Cependant, alors que les règles comme nécessaires sont coups de pied dans, je ne peux pas sembler obtenir la règle DataType pour lancer en (dans ce cas essayer DataType.Currency).

J'ai aussi essayé d'obtenir la validation côté client pour travailler, mais j'espérais qu'il y avait un moyen propre à faire la validation côté serveur de types de données.

Qu'est-ce que d'autres ont fait en ce qui concerne la validation des types de données sur le côté serveur?

Était-ce utile?

La solution

Ce que je fini par faire a été la création de quelques DTO qui représentent les formes. Ces DTO prendraient un Request.Form et la carte automatiquement toutes les valeurs de formulaire dans les propriétés internes (e-mail ex chaîne publique, prenom chaîne publique) basée sur eux étant le même nom que les valeurs du formulaire.

Ils ont toutes les propriétés de chaîne et je mettrais les attributs xVal sur eux. Je puis utiliser xVal et des expressions régulières pour vous assurer que les données à venir en était valide (ex une date valide, e-mail, numéro, etc.). De cette façon, il n'y aurait jamais une exception jetée parce qu'il allait toujours dans une chaîne, par opposition à .Net essayer de l'analyser en une date ou quelque chose.

veillerait à ce que les données ont toujours fait à xVal où je pouvais courir la validation que je veux, et puis convertir au bon type comme DateTime une fois que je sais que j'ai des données valides.

Autres conseils

J'utilise validateurs personnalisés dérivés de ValidationAttribute pour la validation des données qui doivent être analysées sur le côté serveur de chaîne à d'autres types de données. Par exemple:

public class DateAttribute : ValidationAttribute
    {

        public override bool IsValid(object value)
        {
            var date = (string)value;
            DateTime result;
            return DateTime.TryParse(date, out result);
        }
    }

Je l'ai aussi trouvé un moyen de transformer de tels attributs de validation en côté client et validation côté serveur attributs sans écrire de code javascript personnalisé. Je dois juste tirer d'une autre classe de base d'attributs de validation. Jetez un oeil à mon article de blog sur la validation côté client si vous souhaitez en savoir plus à ce sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top