Quelle est la différence de comportement [MaxLength]
et d' [StringLength]
attributs?
Autant que je sache (à l'exception qui [MaxLength]
peut valider la longueur maximale d'un tableau), ils sont identiques et quelque peu redondants?
Quelle est la différence de comportement [MaxLength]
et d' [StringLength]
attributs?
Autant que je sache (à l'exception qui [MaxLength]
peut valider la longueur maximale d'un tableau), ils sont identiques et quelque peu redondants?
Réponses:
MaxLength est utilisé pour Entity Framework pour décider de la taille d'un champ de valeur de chaîne lors de la création de la base de données.
Depuis MSDN:
Spécifie la longueur maximale des données de tableau ou de chaîne autorisée dans une propriété.
StringLength est une annotation de données qui sera utilisée pour la validation de l'entrée utilisateur.
Depuis MSDN:
Spécifie la longueur minimale et maximale des caractères autorisés dans un champ de données.
MaxLengthAttribute
, alors StringLengthAttribute
[MaxLength]
alors un ErrorMessage?
Quelques informations supplémentaires rapides mais extrêmement utiles que je viens d'apprendre d'un autre article, mais que je n'arrive pas à trouver la documentation pour (si quelqu'un peut partager un lien vers celui-ci sur MSDN, ce serait incroyable):
Les messages de validation associés à ces attributs remplaceront en fait les espaces réservés associés aux attributs. Par exemple:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
Affiche le message suivant s'il dépasse la limite de caractères: "L'adresse peut contenir au maximum 100 caractères"
Les espaces réservés dont je suis conscient sont:
Un grand merci à bloudraak pour l'avoir signalé au départ.
Voici les résultats lorsque nous utilisons les deux attributs [MaxLength]
et [StringLength]
, dans EF code first
. Si les deux sont utilisés, [MaxLength]
remporte la course. Voir le résultat du test dans la studentname
colonne de la classe ci-dessous
public class Student
{
public Student () {}
[Key]
[Column(Order=1)]
public int StudentKey { get; set; }
//[MaxLength(50),StringLength(60)] //studentname column will be nvarchar(50)
//[StringLength(60)] //studentname column will be nvarchar(60)
[MaxLength(50)] //studentname column will be nvarchar(50)
public string StudentName { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
Toutes les bonnes réponses ... Du point de vue de la validation, j'ai également remarqué que MaxLength est validé uniquement côté serveur, tandis que StringLength est également validé côté client.
MaxLengthAttribute signifie Max. longueur de tableau ou de chaîne de données autorisée
StringLengthAttribute signifie Min. et max. longueur des caractères autorisés dans un champ de données
Visitez http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
Un autre point à noter est dans l' attribut MaxLength, vous ne pouvez fournir que la plage maximale requise et non une plage minimale requise. Dans StringLength, vous pouvez fournir les deux .
Je l'ai résolu en ajoutant la ligne ci-dessous dans mon contexte:
modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);
D'une manière ou d'une autre, cela [MaxLength]
n'a pas fonctionné pour moi.
Lors de l'utilisation de l'attribut pour restreindre la longueur d'entrée maximale du texte d'un formulaire sur une page Web, StringLength semble générer l'attribut html maxlength (au moins dans mon test avec MVC 5). Celui à choisir dépend alors de la manière dont vous souhaitez alerter l'utilisateur qu'il s'agit de la longueur maximale du texte. Avec l'attribut stringlength, l'utilisateur ne pourra tout simplement pas taper au-delà de la longueur autorisée. L'attribut maxlength n'ajoute pas cet attribut html, à la place il génère des attributs de validation de données, ce qui signifie que l'utilisateur peut taper au-delà de la longueur indiquée et que la prévention d'une saisie plus longue dépend de la validation en javascript lorsqu'il passe au champ suivant ou clique sur Soumettre (ou si javascript est désactivé, validation côté serveur). Dans ce cas, l'utilisateur peut être informé de la restriction par un message d'erreur.