web-dev-qa-db-fra.com

Qu'est-ce que cela signifie pour une propriété d'être [Obligatoire] et annulable?

Qu'est-ce que cela signifie pour une propriété d'être [Required] et nullable? (exemple ci-dessous) Il semble que si c'est [Required] il ne peut pas être null (aucune valeur), et s'il peut être null il ne peut pas être [Required].

[Required]
public DateTime? OrderDate { get; set; }
23
Pismotality

La raison de rendre une propriété nullable et marquée avec le [Required] l'attribut sert à protéger contre les attaques de sous-publication. Il vous permet également d'afficher une valeur vide initiale dans la vue plutôt que la valeur par défaut de la propriété. Cela se fait généralement avec des propriétés de type valeur dans les modèles de vue.

Une attaque de sous-publication est lorsqu'un utilisateur malveillant modifie la demande pour omettre une valeur pour la propriété dans la demande. Si la propriété était DateTime (non nullable), alors le DefaultModelBinder initialisera la valeur par défaut (01/01/0001) et aucune erreur ModelState ne serait générée. En conséquence, cette valeur peut ensuite être enregistrée même si ce n'est pas ce que vous attendez.

Si la propriété est DateTime? (nullable) et [Required], puis si un utilisateur malveillant a omis la propriété dans la demande, une erreur ModelState sera générée car une valeur est attendue dans la demande et la vue sera renvoyée, donc les données non valides ne seront pas être sauvé.

Reportez-vous également à l'article de Brad Wilson Input Validation vs. Model Validation in ASP.NET MVC et la section intitulée Le problème de la "sous-publication" .

30
user3559349

Il est nullable donc le formulaire n'affiche pas une valeur initiale comme 0001-01-01T00:00:00 cela n'a aucun sens.

Il est nécessaire de forcer l'utilisateur à saisir quelque chose.

7
Max Toro

Une annotation de données est requise pour la vue. La vue lui demandera d'avoir une valeur avant d'accepter un post de formulaire.

Le fait que la valeur puisse être annulée est lié à ce qui est autorisé dans la base de données. Une valeur peut être nulle dans la base de données ou la valeur peut être conservée comme nulle.

Ce sont des aspects distincts.

5
Travis J

Il s'agit de required pour la validation client mais nullable pour le mappage DB

3
Sagiv b.g