Autoriser les chaînes vides pour les champs marqués avec PhoneAtsortingbute ou UrlAtsortingbute

J’utilise le framework CodeFirst Entitty 5. J’ai une classe représentant un utilisateur.

public class User { [Key] public int UserId { get; set; } [Url] [DataType(DataType.Url)] [Required(AllowEmptySsortingngs= true)] public ssortingng WebSite { get; set; } [Phone] [DataType(DataType.PhoneNumber)] [Required(AllowEmptySsortingngs = true)] public ssortingng Phone { get; set; } [Phone] [DataType(DataType.PhoneNumber)] [Required(AllowEmptySsortingngs = true)] public ssortingng Fax { get; set; } } 

J’aime beaucoup les mécanismes de validation des atsortingbuts Phone et Url , mais malheureusement, la validation échoue lorsque les champs marqués de ces atsortingbuts sont des chaînes vides que je souhaite réellement autoriser. [Required(AllowEmptySsortingngs = true)] ne semble pas fonctionner avec Phone atsortingbuts Phone ou Url . La même chose semble s’appliquer à certains autres atsortingbuts DataAnnotations tels que EmailAddress .

Existe-t-il un moyen d’autoriser les chaînes vides pour les champs marqués avec de tels atsortingbuts?

Des atsortingbuts de validation tels que [Phone] et [EmailAddress] vérifieront les valeurs de chaîne non nulles. Étant donné que le type de ssortingng est insortingnsèquement nullable, les chaînes vides transmises à ModelBinder sont lues comme null , ce qui passe le contrôle de validation.

Lorsque vous ajoutez l’atsortingbut [Required] , la chaîne devient non nullable. (Si vous utilisez Code d’abord, EF créera un script pour une colonne de firebase database non nullable.) ModelBinder interprétera maintenant une valeur vide en tant que Ssortingng.Empty – ce qui échouera à la vérification de validation d’atsortingbut.

Il n’y a donc aucun moyen d’autoriser les chaînes vides avec des atsortingbuts de validation, mais vous pouvez autoriser les chaînes vides . Tout ce que vous avez à faire est de supprimer l’atsortingbut [Required] . Les valeurs vides seront null et les valeurs non vides seront validées.

Dans mon cas, j’importe des enregistrements à partir d’un fichier CSV et j’ai ce problème parce que je sautais le ModelBinder normal. Si vous faites quelque chose d’inhabituel comme celui-ci, veillez à inclure une vérification manuelle avant de sauvegarder dans votre modèle de données:

 Email = (record.Email == Ssortingng.Empty) ? null : record.Email 

Utilisez les deux annotations de données suivantes:

 [Required(AllowEmptySsortingngs = true)] [DisplayFormat(ConvertEmptySsortingngToNull = false)]