wake-up-neo.com

StringLength vs. MaxLength Attribute ASP.NET MVC mit EF-Code von Entity Framework First

Was ist der Unterschied im Verhalten der [MaxLength]- und [StringLength]-Attribute?

Soweit ich feststellen kann (mit der Ausnahme, dass [MaxLength] die maximale Länge eines Arrays validieren kann), sind diese identisch und etwas redundant.

132

MaxLength wird für das Entity Framework verwendet, um zu bestimmen, wie groß ein Stringwertfeld sein soll, wenn es die Datenbank erstellt.

Von MSDN:

Gibt die maximale Länge des Arrays an oder Zeichenfolgendaten, die in einer Eigenschaft zulässig sind.

StringLength ist eine Datenanmerkung, die zur Überprüfung von Benutzereingaben verwendet wird.

Von MSDN:

Gibt das Minimum und Maximum an Länge der zulässigen Zeichen in einem Datenfeld.

186
Swaff

Einige schnelle, aber äußerst nützliche Zusatzinformationen, die ich gerade aus einem anderen Beitrag gelernt habe, aber die Dokumentation nicht zu finden scheint (falls jemand einen Link dazu in MSDN freigeben kann, wäre das erstaunlich):

Die mit diesen Attributen verknüpften Überprüfungsnachrichten ersetzen tatsächlich die mit den Attributen verknüpften Platzhalter. Zum Beispiel:

[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }

Wird Folgendes ausgegeben, wenn die Zeichenbegrenzung überschritten wird: "Adresse darf maximal 100 Zeichen lang sein"

Die mir bekannten Platzhalter sind:

  • {0} = Name der Eigenschaft 
  • {1} = maximale Länge 
  • {2} = Min. Länge

Vielen Dank an bloudraak für den ersten Hinweis.

35
DamienMann

Im Folgenden sind die Ergebnisse aufgeführt, wenn wir sowohl [MaxLength]- als auch [StringLength]-Attribute in EF code first verwenden. Wenn beide verwendet werden, gewinnt [MaxLength] das Rennen. Siehe das Testergebnis in der Spalte studentname in der nachfolgenden Klasse

 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; }
 }
8
gmail user

Alle guten Antworten ... Aus Sicht der Validierung ist mir auch aufgefallen, dass MaxLength nur auf der Serverseite validiert wird, während StringLength auch auf der Clientseite validiert wird.

6
Abhishek Deo

MaxLengthAttribute bedeutet max. Länge der Array- oder String-Daten zulässig

StringLengthAttribute bedeutet min. und max. Länge der Zeichen, die in einem Datenfeld zulässig sind

Besuchen Sie http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/

Ein weiterer Punkt, den Sie notieren sollten, ist in MaxLength Attribut, das Sie nur angeben können, max erforderlicher Bereich nicht ein min erforderlicher Bereich . Während in StringLength können Sie angeben. beide .

3
Nilesh Moradiya

Wenn Sie das Attribut verwenden, um die maximale Eingabelänge für Text aus einem Formular auf einer Webseite zu beschränken, scheint die StringLength das Maxlength-Attribut html zu generieren (zumindest in meinem Test mit MVC 5). Die Auswahl hängt dann davon ab, wie Sie den Benutzer darüber informieren möchten, dass dies die maximale Textlänge ist. Mit dem stringlength-Attribut kann der Benutzer einfach nicht mehr als die zulässige Länge eingeben. Das Attribut maxlength fügt dieses html-Attribut nicht hinzu, sondern generiert Datenvalidierungsattribute. Dies bedeutet, dass der Benutzer die angegebene Länge überschreiten kann und dass das Verhindern längerer Eingaben von der Validierung in Javascript abhängt, wenn er zum nächsten Feld wechselt oder auf "Senden" klickt (oder Wenn Javascript deaktiviert ist (serverseitige Validierung). In diesem Fall kann der Benutzer durch eine Fehlermeldung über die Einschränkung informiert werden. 

0
Koen

Ich habe es gelöst, indem ich in meinem Kontext eine Zeile darunter eingefügt habe:

modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);

Irgendwie hat [MaxLength] für mich nicht funktioniert.

0
Zerotoinfinity